我简化了我的问题。
此代码仅将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()
答案 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状态。