2016-10-31 7 views
0

私はループの問題があります - 私はファイル( 'f'と 'f2')を読み、アクセント番号( 'acc')で 'f'から各行を取得しようとしていて、これはファイル 'f2'の 'acc'です。 'f2'のループは正しく動作していません。 'f2'で 'acc'を見つけたら 'f'の次の行に移動し、 'f2'の最初の行2から 'acc'を検索し始めるはずですが、終わらないところから始まるようですそこには単純な解決策がありますか?のPythonループ

f = open("test1.txt", "r") 
f2 = open("test2.txt", "r") 

for line in f: 
    acc = line[0:9] 
    for line2 in f2: 
     if acc in line2:    
      print line2 
      break 
+0

f2のaccの最初の発生を見つけた直後に内側のループを壊すのはあなたの意図ですか? – Nf4r

+0

ファイルオブジェクトの位置をリセットする必要があります(例:['file.seek'](https://docs.python.org/2/library/stdtypes.html#file.seek)。または、ファイル全体を最初にリストに読み込んでから、そのファイルを繰り返し使用してください。 – UnholySheep

+2

このコードはテストすることができず、デバッグするのに十分な情報を提供しません。少なくとも 'f'と' f2'を割り当てるコードを追加してください。また、いくつかのサンプル入力がうまくいくでしょう。問題を実証するだけで十分です。 –

答えて

2

あなたはfを定義する方法を示したり、もっと重要なのは、f2が、f2が開いたファイルであれば、あなたはそれから読むためにちょうどあなたのループの前に、それを開くためにどちらかの必要があります(ので、それはありませんまたは最初に戻るにはファイルポインタをリセットします(seekを使用)。

+0

ありがとう、2番目のループが動作するように見える前にファイルを開く、私は小さなインスタンスでそれをテストした、今私は大きなものにしようとする – Asia

0

何かが動作する可能性があります。

f1 = 'filename1.txt' 
f2 = 'filename2.txt' 
with open(f1, 'r') as first_f, open(f2, 'r') as second_f: 
    list_of_accs = (line[:9] for line in first_f.readlines()) 
    f2_lines = f2.readlines() 
    for acc in list_of_accs: 
     for idx, line in enumerate(f2_lines, 1): 
      if acc in line: 
       print('Occurence found at line {idx} with no {acc}'.format(idx=idx, acc=acc))