斯蒂芬的回答解释了如何做到这一点,但没有解释你的尝试有什么问题:
with open('ref.txt') as f1, open('out.txt', 'w') as f2:
for i in range(1, 6):
for line in f1:
value=line.split()
line=' '.join(value) + '\n'
f2.write(line)
你有一个小问题,因为它range(1, 6)
只有 5 个值(print
出来看看);你想range(6)
在这里。
但这里的主要问题是你只打开ref.txt
一次,但试图反复遍历它。您不能使用文件或任何其他类型的迭代器来做到这一点。当您遍历它时,迭代器的整个点都会“用完”。
对此有四种基本解决方案:
如果您有办法“重置”迭代器,则每次都可以通过循环执行此操作。大多数迭代器无法做到这一点,但文件可以seek
:
with open('ref.txt') as f1, open('out.txt', 'w') as f2:
for i in range(6):
for line in f1:
value=line.split()
line=' '.join(value) + '\n'
f2.write(line)
f1.seek(0)
或者,如果您可以(足够便宜)每次通过循环获得一个新的、干净的迭代器,您就可以这样做。在这种情况下,这只是意味着每次都打开文件:
with open('out.txt', 'w') as f2:
for i in range(6):
with open('ref.txt') as f1:
for line in f1:
value=line.split()
line=' '.join(value) + '\n'
f2.write(line)
或者,在某些情况下,您有一个可重用的迭代器(如 a list
),您可以从中获取迭代器,您可以使用它来代替迭代器。但这不适用于这里。
最后,您可以通过将值存储在 a或其他可重复类型(如字符串)中来创建可重用的迭代。list
例如:
with open('ref.txt') as f1:
lines = list(f1)
with open('out.txt', 'w') as f2:
for i in range(6):
for line in lines:
value=line.split()
line=' '.join(value) + '\n'
f2.write(line)
您可能希望将部分或全部处理移动到第一个块中,因此您不要连续执行 6 次。例如:
with open('ref.txt') as f1:
lines = [' '.join(line.split()) + '\n' for line in f1]
with open('out.txt', 'w') as f2:
for i in range(6):
for line in lines:
f2.write(line)
一旦你得到了它,你可以进一步改进它:
with open('ref.txt') as f1:
lines = [' '.join(line.split()) + '\n' for line in f1]
data = ''.join(lines)
with open('out.txt', 'w') as f2:
for i in range(6):
f2.write(data)
更进一步:
with open('ref.txt') as f1:
lines = [' '.join(line.split()) + '\n' for line in f1]
data = ''.join(lines)
with open('out.txt', 'w') as f2:
f2.write(data * 6)