为什么我不能将列表的第一个元素写入Python中的文本文件?

时间:2015-11-03 05:12:41

标签: python text

我有一个像这样的文本文件

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](邮件)

如何将整个列表写入文本文件?

6 个答案:

答案 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']