我有一个像这样的文本文件
Bruce
brucechungulloa@outlook.com
我用它来读取文本文件并将其导出到列表
with open('info.txt') as f:
info = f.readlines()
for item in info:
reportePaises = open('reportePaises.txt', 'w')
reportePaises.write("%s\n" % item)
但是当我想将列表(info)的元素写入另一个文本文件时,只写了info [1](邮件)
如何将整个列表写入文本文件?
答案 0 :(得分:2)
with open('data.csv') as f:
with open('test2.txt', 'a') as wp:
for item in f.readlines():
wp.write("%s" % item)
wp.write('\n') # adds a new line after the looping is done
那会给你:
布鲁斯
brucechungulloa@outlook.com
在两个文件中。
答案 1 :(得分:2)
您遇到问题是因为每次打开带有'w'
标志的文件时,都会在磁盘上覆盖它。所以,你每次都创建一个新文件。
您应该只在with语句中打开第二个文件一次:
with open('info.txt') as f, open('reportePaises.txt', 'w') as reportePaises:
info = f.readlines()
for item in info:
reportePaises.write(item)
正如@Pynchia建议的那样,最好不要使用.readlines()
,而是直接在输入文件上循环。
with open('info.txt') as f, open('reportePaises.txt', 'w') as reportePaises:
for item in f:
reportePaises.write(item)
这样,您不会通过将其保存到列表中来创建RAM中的while文件的副本,如果文件很大(显然,使用更多RAM),这可能会导致很大的延迟。相反,您将输入文件视为迭代器,并在每次迭代时直接从HDD读取下一行。
你也(如果我做了正确的测试)不需要将'\n'
附加到每一行。换行符已在item
中。因此,您根本不需要使用字符串格式,只需reportePaises.write(item)
。
答案 2 :(得分:1)
每次写入文件时都会以写入模式打开文件,从而有效地覆盖您编写的上一行。请改为使用附加模式a
。
reportePaises = open('reportePaises.txt', 'a')
编辑:或者,您可以打开文件一次,而不是循环遍历这些行,按如下方式编写整个内容:
with open('reportePaises.txt', 'w') as file:
file.write(f.read())
答案 3 :(得分:1)
一次又一次地尝试不打开输出文件。
with open('info.txt') as f:
info = f.readlines()
with open('reportePaises.txt', 'w') as f1:
for x in info:
f1.write("%s\n" % x)
这将有效。
答案 4 :(得分:0)
这里有两个问题。一个是你在循环中打开输出文件。这意味着它被打开了好几次。因为你也使用" w"标志,表示每次打开文件时都会将其截断为零。因此,您只能写完最后一行。
最好在循环外打开输出文件。你甚至可以使用外部with
块。
答案 5 :(得分:0)
您只需尝试以下代码即可。您的代码无法正常工作,因为您在文件处理程序中添加了开头报告' reportPaises'在for循环中。您不需要一次又一次地打开文件处理程序。
尝试在python shell中逐行运行代码,因为调试代码中的错误非常容易。
以下代码可以使用
with open('something.txt') as f:
info = f.readlines()
reportePaises = open('reportePaises.txt', 'w')
for item in info:
reportePaises.write("%s" % item)
您不需要在输出行添加\ n,因为在执行读取行时,\ n字符会保留在信息列表文件中。请看下面的观察。
尝试以下
with open('something.txt') as f:
info = f.readlines()
print info
您将获得的输出是
['Bruce\n', 'brucechungulloa@outlook.com']