2017-01-14 5 views
0

ファイル内の特定の単語を見つけようとしていて、条件が満たされたときに次の行を印刷します。ファイル操作を最初からやり直しています。

f = open('/path/to/file.txt','r') 
lines = f.readlines() 
for line in lines: 
    if 'P/E' in line: 
     n = lines.index(line) #get index of current line 
     print(lines[n+1])  #print the next line 
a.close() 

「P/E」という文字列が、ファイル内で別々の行に4回存在します。

このコードを実行すると、最初の2回の 'P/E'の出現後に次の行が正常に印刷されます。それから、再び最初に戻って、同じ最初の2回の出現をもう一度印刷して終了します。ループは最初の2回のオカレンスの後には進行していません。それはプロセスを繰り返して終了します。

データファイルをチェックして、実際の出力結果を確認しましたが、次の行はすべて「P/E」の後に表示されます。

どうすれば解決できますか?ありがとう。

答えて

2

list.index()引数が1つのみの場合、が最初にになります。前のインデックスより前の要素を見つけるための出発点を与える必要があります。list.index()は、検索を開始する場所を示す第2引数をとります。

ただし、lines.index()を使用する必要はありません。それは非常に非効率的です。リストを完全にスキャンし、一致が見つかるまで各行をテストする必要があります。

ちょうどあなたループとしてインデックスを追加するためにenumerate() functionを使用します。

for index, line in enumerate(lines): 
    if 'P/E' in line: 
     print(lines[index + 1]) 

注意してください、index + 1が有効なインデックスではない可能性があります。 linesリストの最後の行に'P/E'があると、IndexErrorが表示されます。 and index + 1 < len(lines)テストを追加する必要があります。

file.readlines()を使用すると、すべてのファイルが一度にメモリに読み込まれることに注意してください。これを避けるようにしてください。ファイルの上に直接ループすることができます。その代わりにの前に行を覚えておいてください。

with open('/path/to/file.txt','r') as f: 
    previous = '' 
    for line in f: 
     if 'P/E' in previous: 
      print(line) # print this line 
     previous = line # remember for the next iteration 
関連する問題