当我在python中写入两个文件时,第二个文件始终为空

时间:2015-06-22 16:08:32

标签: python file-io

我正在使用一个简单的python脚本将一些数据写入两个文本文件。我的代码如下所示:

with open('file1.txt', 'w') as file1:
    for thing in stuff1:
        file1.write(thing + '\n')

with open('file2.txt', 'w') as file2:
    for thing in stuff2:
        file2.write(thing + '\n')

当我运行程序时,file1按预期结束,但file2为空。

但是,如果我切换我写入文件的顺序(意味着我先写入file2然后再写入file1),file2会按预期结束,而file1为空。

换句话说,我写的第二个文件总是空的。

我尝试在循环中添加file1.flush()/ file2.flush(),但无济于事。知道为什么会这样吗?

3 个答案:

答案 0 :(得分:4)

我猜这里,但你的问题可能是stuff1stuff2指向同一个生成器或迭代器,而你只能迭代一次。之后,其内容已用尽。

请改为尝试:

import itertools

stuff1, stuff2 = itertools.tee(the_source_generator_or_iterator_or_whatever)

with open('file1.txt', 'w') as file1:
    for thing in stuff1:
        file1.write(thing + '\n')

with open('file2.txt', 'w') as file2:
    for thing in stuff2:
        file2.write(thing + '\n')

答案 1 :(得分:1)

我的猜测是你有这条线

stuff2 = stuff1

在您的代码片段和stuff1之前,stuff2是生成器。如果是这样,它们将成为同一发电机的别名。第一个写循环耗尽(单个)发生器。

答案 2 :(得分:0)

我猜stuff2是空的。 您可以在进入第二个for循环之前打印变量进行调试。