1. ホーム
  2. python

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

2022-02-14 13:26:46

質問

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

paremeterの"w"を落とすと、他にこんなエラーが出ます。

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

の内容をそのまま踏襲している(と思う)。 こちら .

改行しようとすると、同じことが起こります。どうすれば直るのでしょうか?

解決方法を教えてください。

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

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

w は、(一重または二重の)引用符で囲む必要があります。

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

を引用すると ドキュメント 再ファイルモード

最初の引数は、ファイル名を含む文字列である。 第2引数は、別の 文字列 数文字を含む ファイルの使用方法を記述します。

Re : "パレメーターを削除すると、次のような別のエラーが発生します: ..IOError: File not open for writing"

これは、もし いいえ ファイルモードが指定されている場合、デフォルト値は 'r' というメッセージが表示されますが、これは、ファイルが書き込み用に開かれていないのではなく、読み込み用に開かれていることを意味しています。

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