Python IOError: 文件没有以写入模式打开, 全局名称 'w' 未定义。

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

我正在严格按照这里的方法进行操作。

当我尝试添加新行时,出现了相同的错误。我应该如何修复这个问题?


1
你的 getNewNum 函数应该只是 ' '.join(newLine) - Daniel Roseman
2个回答

27
问题出在`writeDoc()`函数中的`open()`函数调用上,文件模式规定不正确。open()是Python内置的文件操作函数。
openfile = open("numbers.txt", w)
                               ^

代码中的w需要有一对单引号或双引号包围,即:

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

引用自文档关于文件模式的说明:

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

: "如果我省略了"w"参数,我会得到另一个错误:..IOError: File not open for writing"

这是因为如果没有指定文件模式,缺省值为'r'ead,这解释了文件无法被打开进行“写入”的消息,它已经被打开以供“读取”。

请参阅此Python文档以获取有关读写文件和有效模式规范的更多信息。


天啊!不敢相信我用Python这么长时间了,还是犯了这样的愚蠢错误(然后不得不查找出错原因。最后发现完全省略了模式参数。) - ArtOfWarfare

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

第一个参数是包含文件名的字符串。第二个参数是另一个字符串,其中包含描述文件使用方式的几个字符。当文件仅被读取时,模式可以为“r”,仅写入时为“w”(具有相同名称的现有文件将被擦除),而“a”则打开文件以进行附加;写入文件的任何数据都会自动添加到末尾。 “r+”打开文件进行读取和写入。模式参数是可选的;如果省略,则假定为“r”。

此外,您的实现导致open()方法寻找已声明为w的参数。然而,您想要传递字符串值以指示附加选项,该选项由引号括起来表示。
openfile = open("numbers.txt", "a") 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接