2012-07-03 6 views
9

私はPythonでファイル内に次のような行を書いてみようとしています(Python IOError:書き込み用にファイルが開かず、グローバル名 'w'が定義されていません

)。
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" paremeterをドロップすると、私はこの他のエラーを取得:

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

私はhereとまったく同じです(私が願っています)。

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

+1

あなたの 'getNewNum'関数は' ''.join(newLine)'でなければなりません。 –

答えて

23

writeDoc()open()コールでファイルモード指定が正しくないという問題があります。ファイルモード再docsから引用すると、すなわち、

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

をその周りに引用符(単一または二重のペアを)持っている

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

wニーズ:

The first argument is a string containing the filename. The second argument is another string containing a few characters describing the way in which the file will be used.

Re: "私が" w "パラメータをドロップした場合、私はこの他のエラーを受け取ります:..IOError:ファイルが書き込み用に開かれていません"

ファイルモードが指定されている場合、デフォルト値は'r' eadで、「書き込み」のために開かれていないファイルについてのメッセージが「読み込み」のために開かれているためです。

Reading/Writing filesの詳細と有効なモードの仕様については、このPythonのドキュメントを参照してください。

+0

D'oh!私が長い間Pythonを使ってきたとは信じられません。私はまだこのようなばかげた行為をしています(そして、何が起こっているのかを調べなければなりません。 – ArtOfWarfare

2

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

The first argument is a string containing the filename. The second argument is another string containing a few characters describing the way in which the file will be used. mode can be 'r' when the file will only be read, 'w' for only writing (an existing file with the same name will be erased), and 'a' opens the file for appending; any data written to the file is automatically added to the end. 'r+' opens the file for both reading and writing. The mode argument is optional; 'r' will be assumed if it’s omitted.

open()方法で実装結果はwとして宣言されたパラメータを探しています。しかし、あなたが望むのは、引用符で囲まれたappendオプションを示す文字列値を渡すことです。

openfile = open("numbers.txt", "a") 
関連する問題