2011-07-25 25 views
0

私はあなたに質問する必要があります。ここに私のスクリプトの一部です: indice.txtPython:ネストされたForループ

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() 

は、実数の3列を含むファイルです。

主な問題は、i_Lの外側ループがi_Lの最初の値に対して実行されると、ループが壊れて出力に1つの値のみが表示されることです。

誰でも助けることができますか?

+1

これはなに? Python?もしそうなら、利用可能なタグを使用してください。 –

+1

あなたはおそらくあなたが使用している言語でこのタグを付けるべきです。 – Randy

+0

私たちに与えたことは、何が起こっているのか把握するのに十分ではありません。 EGコードのどこかに「続行」または「中断」がありますか? あなたはプリントアウトしていますか?ファイルには3つの*列*がありますが、そこにはいくつの行がありますか? –

答えて

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

ます。また、リストに一度にすべての行を読んで、それを使用し続けることができ

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, ""): 
    ... 
の省略形です(このindice.txtと仮定すると500ギガバイトのデータを好まれません)

実際には、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/ さまざまな種類のイテレータがどのように機能するかを説明します。そして、ファイルを繰り返し処理するとどうなりますか?

関連する問題