斯蒂芬的回答解釋瞭如何做到這一點,但並不能說明什麼地方錯了你的嘗試:
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)
另外,在某些情況下,你有一個可重複使用的可迭代(如list
)坐在身邊,你得到了迭代器,和你可以使用它來代替迭代器。但這並不適用於此。
最後,您可以創建通過在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)
此打印出來333335555566666代替356356356356356.有任何方法? –
@ChangWoonJang編輯過的文章 – Stephan
當我使用這個時,輸入error:join()只發生一個參數。另外,我把:在f1之後。當我刪除連接()中的重複時,沒有任何打印。你能檢查一下嗎?謝謝。 –