2011-07-25 264 views
0

我有一個問題,我需要問你。這裏是我的腳本的一部分:Python:嵌套循環

scan=file('indice.txt','r') 
for i_L in range(10): 
    for line in scan: 
     a,b,c=line.split() 
     do something ... 
     ... ... 
    print something 
scan.close() 

indice.txt是包含實數的3列的文件。

主要問題是,當i_L的外循環執行i_L的第一個值時,循環被打破,輸出中只顯示一個值。

任何人都可以提供幫助嗎?

+1

這是什麼?蟒蛇?如果是的話,使用可用的標籤。 –

+1

你應該使用你正在使用的任何語言來標記它。 – Randy

+0

請認真瞭解我們更多的代碼 - 您給我們的東西不足以讓我們弄清楚發生了什麼。 EG你有代碼中的某處有「繼續」還是「休息」? 你打印出來的是什麼?您的文件中有三列*列,但有多少行? –

回答

3

你重新開始遍歷文件中的行之前,你應該尋求該文件的開頭:

scan=file('indice.txt','r') 
for i_L in range(10): 
    for line in scan: 
     a,b,c=line.split() 
     do something ... 



     ... 
    print something 
    scan.seek(0) 
scan.close() 

file.seek

您還應該考慮先緩存行,然後再處理緩存。

1

您還可以閱讀所有線路在一旦進入列表,並繼續使用它(假設這indice.txt不像500GB數據)

scan=file('indice.txt','r') 
lst_scan = list(scan) 
scan.close() 
for i_L in range(10): 
    for line in lst_scan: 
     a,b,c=line.split() 
     do something ... 



     ... 
    print something 
0
for line in file: 
    ... 

for line in iter(file.readline, ""): 
    ... 
速記

所以你可以看到它實際上是調用readline來移動文件的當前位置,就像其他 文件操作一樣。它不會回到文件的開頭當您再次重複,除非你手動設置當前位置,如:

yourfile.seek(0) 

此外,如果你不想從最後一個位置而不是從尋求開始的時候,2「的for..in ..」是不是一個好辦法要麼,因爲它可能有它的緩衝區,這個正確的方法是:

it = iter(file) 
    for line in it: 
     if line == "\n": 
      break 
    for line in it: 
     print line, 

請參見PEP234以瞭解更多內容: http://www.python.org/dev/peps/pep-0234/ 它解釋了不同種類的迭代器如何工作。當迭代一個文件時會發生什麼。