2016-08-02 18 views
0

私は2つのファイル:"a.txt""b.txt"を持っています。ファイルには、次が含まれています。Python - 複数のファイルの行をループする方法

1 
2 
3 
4 
5 
6 
7 
8 
9 
10 

ラインを一致させるために、私は次のよう

a = open("a.txt","r") 
    b = open("b.txt","r") 
    for al in a: 
     al = al.split() 
     val_a = al[0] 
     for bl in b: 
      bl = bl.split() 
      val_b = bl[0] 
      print val_a, val_b 

をやっている驚くべきことに、print文ONLYは、次のように出力されます

1 1 
1 2 
1 3 
1 4 
1 5 
1 6 
1 7 
1 8 
1 9 
1 10 

表示されますaのループは一度しかアクセスされないことになります。

for al in a: 
    al = al.split() 
    val_a = al[0] 
    print val_a 
    for bl in b: 
     bl = bl.split() 
     val_b = bl[0] 

print文ここa内のすべての値を出力します

誰かが考えられる説明で私を助けることができます:私はデバッグのために試したことは以下の通りですか?

+1

/questions/16095855/whats-the-most-pythonic-way-to-all-of-multiple-of-multiple-files) –

+1

また、http://stackoverflow.com/questions/13137969/python- 2つのファイルからのループ内での読み込み中の行 –

+0

通常の "open"ステートメントの代わりに "with"を使用してしまったそれはうまくいくようです。 – ifreak

答えて

3

あなたはreadlines()と行のリストにbを取得することができ、その後、あなたは何度も何度もそれを反復処理することができます。

a = open("a.txt","r") 
b = open("b.txt","r").readlines() 
for al in a: 
    al = al.split() 
    val_a = al[0] 
    for bl in b: 
     bl = bl.split() 
     val_b = bl[0] 
     print val_a, val_b 
+2

サイズにもよりますが、bの行を一度読み取るとさらに便利です –

0

変換bを他のリスト最初の反復としてB経由でファイルを消費します。

その後
blist= list(b) 

内部ループ

For bl in blist: 
... 
4

あなたはそうあなたが最後に達した、b.txtのためにファイルの先頭に、あなたがそれをループしようとするたびにファイルポインタをリセットする必要があります。以下に示すように

これを行う最も簡単な方法は、file.seek(0)である:

a = open("a.txt","r") 
b = open("b.txt","r") 
for al in a: 
    al = al.split() 
    val_a = al[0] 

    b.seek(0) 

    for bl in b: 
     bl = bl.split() 
     val_b = bl[0] 
     print val_a, val_b 
0

これを試してみてください。同様の質問がhttp://stackoverflow.com([こっち]答えている

a = open("a.txt","r") 
b = open("b.txt","r") 
for i,j in zip(a,b): 
    print (i.split())[0] 
    print (j.split())[0] 
+1

なぜそれがうまくいくのかについての説明を追加してください。 –

関連する問題