Python IOError:文件未打开以进行写入,并且未定义全局名称“w”

时间:2012-07-03 18:50:55

标签: python io syntax-error

我正在尝试编写一个小程序,用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

我完全遵循(我希望)here

当我尝试追加新行时会发生同样的情况。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:25)

问题出在writeDoc() openfile = open("numbers.txt", w) ^ 调用中,文件模式规范不正确。

w

openfile = open("numbers.txt", "w") ^ 需要有(一对单引号或双引号)引号,即

'r'

引用open()重新文件模式:

  

第一个参数是包含文件名的字符串。     第二个参数是另一个包含几个字符的 字符串     描述文件的使用方式。

重新:“如果我放下”w“参数,我会收到另一个错误:..IOError:文件没有打开写”

这是因为如果指定了 no 文件模式,则默认值为{{1}} ead,这解释了关于文件未被“打开”打开的消息,它已被打开为“读数”。

有关docs和有效模式规范的更多信息,请参阅此Python文档。

答案 1 :(得分:2)

可以将数据附加到文件,但您当前正在尝试设置写入文件的选项,这将覆盖现有文件。

  

第一个参数是包含文件名的字符串。第二   argument是另一个字符串,包含一些描述该字符的字符   将使用该文件的方式。当文件出现时,mode可以是'r'   只读,'w'仅用于写入(具有相同的现有文件)   名称将被删除),'a'打开文件进行追加;任何数据   写入文件会自动添加到文件末尾。 'r +'打开了   阅读和写作的文件。 mode参数是可选的; 'R'   将被假设,如果它被省略。

此外,您的实现会导致open()方法查找声明为w的参数。但是,您想要的是传递字符串值以指示append选项,该选项由引号括起来表示。

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