【问题标题】:Writing to a file in a for loop only writes the last value在 for 循环中写入文件
【发布时间】:2012-06-27 06:17:50
【问题描述】:
text_file = open("new.txt", "r")
lines = text_file.readlines()

for line in lines:
        var1, var2 = line.split(",");
        myfile = open('xyz.txt', 'w')
        myfile.writelines(var1)
        myfile.close()

text_file.close()

我在 new.txt 中有 10 行文本,例如 Adam:8154George:5234,等等。现在我想要一个只包含名称的文本文件。 xyz.txt 必须包含 AdamGeorge 等。上面的代码只给我留下了第 10 个名字。

如何在一个文本文件中包含所有 10 个名称?

【问题讨论】:

    标签: python


    【解决方案1】:

    那是因为你在 for 循环中打开、写入和关闭文件 10 次

    myfile = open('xyz.txt', 'w')
    myfile.writelines(var1)
    myfile.close()
    

    您应该在 for 循环之外打开和关闭文件。

    myfile = open('xyz.txt', 'w')
    for line in lines:
        var1, var2 = line.split(",");
        myfile.write("%s\n" % var1)
    
    myfile.close()
    text_file.close()
    

    您还应该注意使用 writenot writelines

    writelines 将行列表写入您的文件。

    您还应该查看这里使用with 声明的人们发布的答案。这是在 Python 中进行文件读/写操作的优雅方式

    【讨论】:

    • 或者在循环之前使用with
    • 它没有对结果做任何改变
    • @user1481274:我认为你正在使用 writelines
    • 您不需要'\n' 和您的myfile.write(var1) 声明吗?
    • @Levon:你是对的。我并没有关注他是如何解决问题的,而是他的解决方案出了什么问题。文件在循环内打开并且 writeline 的使用不正确。事实上 with 的使用更优雅,但这是理解的另一个飞跃,并且确实提到了,因为已经为此提供了解决方案:)
    【解决方案2】:

    主要问题是您在循环中反复打开/关闭文件。

    试试这个方法:

    with open('new.txt') as text_file, open('xyz.txt', 'w') as myfile:  
        for line in text_file:
            var1, var2 = line.split(",");
            myfile.write(var1+'\n')
    

    我们同时打开这两个文件,因为我们使用的是with,所以当我们完成(或发生异常)时,它们将自动关闭。以前,您的输出文件在循环内反复打开。

    我们也在逐行处理文件,而不是一次将文件全部读入内存(当您处理非常大的文件时,这可能是个问题)。

    请注意,write() 不会附加换行符 ('\n'),因此如果需要,您必须自己执行此操作(我将您的 writelines() 替换为 write(),因为您正在编写单个项目,而不是项目列表)。

    当为rread 打开文件时,'r' 是可选的,因为它是默认模式。

    【讨论】:

      【解决方案3】:

      最好使用上下文管理器自动关闭文件

      with open("new.txt", "r"), open('xyz.txt', 'w') as textfile, myfile:
          for line in textfile:
              var1, var2 = line.split(",");
              myfile.writelines(var1)
      

      【讨论】:

      • 我知道你可以用 with 打开多个文件(我在上面做同样的事情),但我不知道最后文件变量的这种格式.. 学到了一些新的、整洁的东西。
      • 不应该因为under with而缩进吗?
      • @andilabs,谢谢。当然应该。迟到总比没有好:)
      猜你喜欢
      • 2011-10-25
      • 2021-07-06
      • 1970-01-01
      • 1970-01-01
      • 2020-02-14
      • 2018-01-12
      • 2018-03-14
      • 1970-01-01
      • 2016-09-30
      相关资源
      最近更新 更多