在Python 3.4中写入文本文件

Set*_*eth 1 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()
Run Code Online (Sandbox Code Playgroud)

ark*_*cha 5

您在每次迭代中重新打开该文件.别!

open()考虑到w你交出的旗帜,那个函数(无论哪种语言)在写入之前肯定会清空文件.您可能希望使用a标志,大多数语言使用它来"追加"到文件:

output = open("newlist.txt",'a', newline="\r\n")
Run Code Online (Sandbox Code Playgroud)

但这仍然意味着您在每次迭代中重新打开文件,这非常慢.它更有意义打开文件一次循环之前.然后你可以限制自己写入迭代内部已经打开的文件.我不知道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()
Run Code Online (Sandbox Code Playgroud)

@eryksun在下面的评论中建议使用withpython 的构造来获得更优雅和更健壮的解决方案(这是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)
Run Code Online (Sandbox Code Playgroud)

如果 python像@eryksun所说的那样清理,对我来说看起来非常直观和合乎逻辑.