web-dev-qa-db-ja.com

Python IOError:ファイルを書き込み用に開いておらず、グローバル名 'w'が定義されていません

私は次のように、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

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

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

9
craftApprentice

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

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

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

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

docs ファイルモードから引用するには:

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

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

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

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

26
Levon

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

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

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

openfile = open("numbers.txt", "a") 
2
RobB