我正在尝试编写一个小程序,用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。
当我尝试追加新行时会发生同样的情况。我该如何解决这个问题?
答案 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")