2013-07-31 69 views
1

我有一個關於python編程的問題。PYTHON從參考文件幾次打印

如果我有一個參考文件(ref.txt)像

3 
5 
6 

我想打一個輸出文件一樣,如果我想5倍這些字符串

3 
5 
6 
3 
5 
6 
3 
5 
6 
3 
5 
6 
3 
5 
6 

共15行。

我還以爲像

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) 

此代碼的代碼只打印原始值。如何打印多個重複參考值線。

謝謝。

回答

4
repeat = "" 
with open('ref.txt') as f1: 
    for line in f1: 
     repeat = "".join([repeat, line]) 
with open('out.txt', 'w') as f2: 
    f2.write(repeat*5) 
+0

此打印出來333335555566666代替356356356356356.有任何方法? –

+0

@ChangWoonJang編輯過的文章 – Stephan

+0

當我使用這個時,輸入error:join()只發生一個參數。另外,我把:在f1之後。當我刪除連接()中的重複時,沒有任何打印。你能檢查一下嗎?謝謝。 –

2

斯蒂芬的回答解釋瞭如何做到這一點,但並不能說明什麼地方錯了你的嘗試:

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) 
+0

這對理解我錯過了什麼和代碼非常有用。比你非常感謝你的幫助。 –