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

我完全按照(我希望)这里有什么。

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

4

2 回答 2

27

问题在于文件模式规范中的open()调用writeDoc()不正确。

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

需要在w它周围有(一对单引号或双引号),即

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

引用docs re 文件模式:

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

回复:“如果我删除“w”参数,我会收到另一个错误:..IOError: File not open for writing”

这是因为如果指定文件模式,则默认值为'r'ead,这解释了有关文件未打开以进行“写入”的消息,它已打开以进行“读取”。

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

于 2012-07-03T18:51:52.960 回答
2

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

第一个参数是一个包含文件名的字符串。第二个参数是另一个字符串,其中包含一些描述文件使用方式的字符。mode 可以是 'r' 只读取文件,'w' 只写入(同名的现有文件将被删除),'a' 打开文件进行追加;写入文件的任何数据都会自动添加到末尾。'r+' 打开文件进行读写。mode 参数是可选的;如果省略,将假定 'r'。

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

openfile = open("numbers.txt", "a") 
于 2012-07-03T18:55:17.083 回答