在Python 3.4中写入文本文件

时间:2014-04-30 06:03:33

标签: text python-3.x output

我简化了我的问题。

此代码仅将list.txt文件的最后一个文本行后跟一个CR / LF写入newlist.txt文件。怎么会。它将所有条目打印到屏幕上的一行,但只将最后一行写入文件。

这是我关于这个主题的第一篇文章的关键,但我正在努力简化问题

f = open("list.txt","r")
for line in f:
    print(line)
    output = open("newlist.txt",'w', newline="\r\n")
    output.write(line)
f.close()

1 个答案:

答案 0 :(得分:5)

您在每次迭代中重新打开文件。唐'!吨

open()函数(无论哪种语言)在写入之前肯定会清空文件,考虑到你移交的w标记。您可能希望使用a标志,而大多数语言都使用该标志用于"追加"到文件:

output = open("newlist.txt",'a', newline="\r\n")

但这仍然意味着你在每次迭代中重新打开文件,这很慢。在循环之前打开文件一次更有意义。然后你可以限制自己写入迭代内部已经打开的文件。我不懂python,但可能这就是你要找的东西:

f = open("list.txt","r")
o = open("newlist.txt",'w', newline="\r\n")
for line in f:
    print(line)
    o.write(line)
o.close()
f.close()

@eryksun在下面的评论中建议使用python的with结构来获得更优雅和更强大的解决方案(这是python,对吧?)。我冒昧地在这里提出这个建议,因为它显然是有道理的。我希望我做对了:

with open("list.txt") as f, open("newlist.txt", "w", newline="\r\n") as o:
    for line in f:
        print(line)
        o.write(line)

对我来说非常直观和合乎逻辑,如果 python清理为@eryksun状态。