我正在使用一个简单的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(),但无济于事。知道为什么会这样吗?
答案 0 :(得分:4)
我猜这里,但你的问题可能是stuff1
和stuff2
指向同一个生成器或迭代器,而你只能迭代一次。之后,其内容已用尽。
请改为尝试:
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循环之前打印变量进行调试。