2017-10-12 181 views
0

我正在用for循環讀取兩個不同的文件。第一次「for循環」在第一次迭代後停止。打印輸出僅爲f1的line1,所有行爲f2,但退出循環。第一次「for循環」在第一次迭代後停止python

for line1 in f1: 
    line1 = line1.split('\t') 
    for line2 in f2: 
     line2 = line2.split('\t') 

     print line1,line2 

F1:

X1

X2

X3

F2:

Y1

Y2

Y3

輸出:

X1 Y1

X1 Y2

X1 Y3

X2 Y1

X2 Y2

X2 Y3

X3 Y1

X3 Y2

X3 Y3

+1

一旦在外循環的第一次迭代中讀完了所有的'f2',內循環(和'print')就不會再執行了。 –

+0

f1和f2的構造方式相同嗎?我測試過了和代碼作品。嘗試只是將for循環中的變化f1測試爲f2並查看它是否正確迭代。 – farbiondriven

+0

@Johnny Mopp我認爲這可能是原因。你能告訴我如何繼續這個。我試過「繼續」,但輸出沒有變化。 – kashiff007

回答

1

你環路當前嵌套,這意味着你的程序會讀取f1中每行的全部內容爲f2。但一旦到達文件2的末尾(在第一個外觀結束時,f2中沒有更多行可讀,因此我們手動將光標重置爲開始)

嘗試4: 您沒有重置光標在文件2上第一次到達文件末尾時,除非在每次迭代中重新打開文件,否則必須手動將光標移動到開頭。 如果我現在已經正確理解您的話:

def print_both(f1, f2): 
    f1.seek(0) 
    f2.seek(0) 
    for line1 in f1: 
     line1 = line1.split('\t') 
     for line2 in f2: 
      line2 = line2.split('\t') 
      print(line1, line2) 

     f2.seek(0) 


print_both(open("f1.tsv", 'r'), open("f2.tsv", 'r')) 
+0

只是打印來自f1的所有行和來自f2的同一行數。 – kashiff007

+0

你想讀一個,然後其他或所有的行,即使一個完成? –

+0

試圖閱讀一個,然後其他或所有行,即使他們兩個完成 – kashiff007