10

私は次のように、Pythonを使用してファイルに行を書き込む(追加する方がよい)小さなプロシージャを書き込もうとしています。

def getNewNum(nlist):
    newNum = ''
    for i in nlist:
        newNum += i+' ' 
    return newNum

def writeDoc(st):
    openfile = open("numbers.txt", w)
    openfile.write(st)

newLine =  ["44", "299", "300"]

writeDoc(getNewNum(newLine))

しかし、これを実行すると、次のエラーが発生します。

openfile = open("numbers.txt", w)
NameError: global name 'w' is not defined

「w」パラメータを削除すると、次のエラーが発生します。

line 9, in writeDoc
    openfile.write(st)
IOError: File not open for writing

私はここにあるものを正確にフォローしています(私は願っています) 。

新しい行を追加しようとすると、同じことが起こります。どうすれば修正できますか?

4

2 に答える 2

27

問題は、ファイルモードの指定が正しくないというopen()呼び出しにあります。writeDoc()

openfile = open("numbers.txt", w)
                               ^

そのw周りに(シングルまたはダブルのペアの)引用符を付ける必要があります。

openfile = open("numbers.txt", "w")
                                ^

docs re fileモードから引用するには:

最初の引数は、ファイル名を含む文字列です。2番目の引数は、ファイルの使用方法を説明するいくつかの文字を含む別の文字列です。

Re:「「w」パラメータを削除すると、次のエラーが発生します:..IOError:ファイルを書き込み用に開いていません」

これは、ファイルモードが指定されていない'r'場合、デフォルト値はeadであり、ファイルが「書き込み」用に開かれていないというメッセージを説明し、「読み取り」用に開かれているためです。

ファイルの読み取り/書き込みと有効なモード仕様の詳細については、このPythonドキュメントを参照してください。

于 2012-07-03T18:51:52.960 に答える
2

ファイルにデータを追加することは可能ですが、現在、ファイルに書き込むオプションを設定しようとしています。これにより、既存のファイルが上書きされます。

最初の引数は、ファイル名を含む文字列です。2番目の引数は、ファイルの使用方法を説明するいくつかの文字を含む別の文字列です。モードは、ファイルが読み取りのみの場合は「r」、書き込みのみの場合は「w」(同じ名前の既存のファイルは消去されます)、「a」は追加用にファイルを開きます。ファイルに書き込まれたデータはすべて自動的に最後に追加されます。'r +'は、読み取りと書き込みの両方のためにファイルを開きます。mode引数はオプションです。省略した場合は「r」とみなされます。

さらに、実装の結果、open()メソッドはとして宣言されたパラメーターを検索しますw。ただし、必要なのは、追加オプションを示す文字列値を渡すことです。これは、引用符で囲まれて示されます。

openfile = open("numbers.txt", "a") 
于 2012-07-03T18:55:17.083 に答える