为什么在Python中向文本文件写入换行符不起作用?

3
我试图将列表保存到文本文件中,每个句子占一行。但是为什么这些代码对我无效呢?有人知道吗?谢谢。
import codecs

text = ["good morning", "hello everybody"] 

for texts in text:
    file = codecs.open("newlinetest.txt", "w", "utf-8")
    print texts
    file.write(texts + "\n")

file.close()  
3个回答

5
您在text中为每个字符串打开文件,但未将其关闭,这可能会导致错误(您没有提到)。请使用 with 语句打开文件,无需手动关闭文件(也不要将文件引用命名为file,因为它会遮蔽Python内置的文件)。另外,请注意需要使用'a'作为打开模式,以便您始终向文件添加内容而不是覆盖它:
import codecs

text = ["good morning", "hello everybody"] 

with codecs.open("newlinetest.txt", "a", "utf-8") as my_file:  # better not shadow Python's built-in file
    for texts in text:
         print texts
         my_file.write(texts + "\n")
# no need to call my_file.close() at all

2
即使操作者关闭它,由于使用写入访问 ('w') 打开会覆盖现有内容,因此仅会有一行。 - cdarke
@cdarke 确实,我错过了那个。我已经修正了我的答案。 - DeepSpace

0

同时使用 '\n\n' 来引入换行空格,因为第一个 '\n' 参数不会产生任何效果,但可以确保下一组输入从下一行开始。


0

你只需要在循环外打开文件一次,然后可以使用 str.join 写入,w 会覆盖,所以每次迭代都会被覆盖,最终只有列表中的最后一个元素被写入:

import codecs

text = ["good morning", "hello everybody"]
with codecs.open("newlinetest.txt", "w", "utf-8") as f:
    f.write("\n".join(text))

由于您正在传递一个列表,因此使用换行符作为分隔符,csv模块将非常适合您想要执行的操作:

text = ["good morning", "hello everybody"]
import csv
with codecs.open("newlinetest.txt", "w", "utf-8") as f:
    wr = csv.writer(f,delimiter="\n")
    wr.writerow(text)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接