1

あるテキスト ファイルの行を別のテキスト ファイルと 1 行ずつ一致させたいのですが、入れ子になった for ループに問題があり、単純でなければなりませんが、見つかりません。

for line1 in ratings:
    cont1+=1

    for line2 in movies:
         cont2+=1
         print(cont1,cont2)

エラーを確認するために、このループで単純化しました. 外側のループは cont=2 に達しません.

1 1
1 2
1 3
1 4
1 5
1 6
1 7
.
.
.
1 157
>>>
4

4 に答える 4

5

両方のファイルを同時にループする必要があります

ratings= open('ratings.txt')
movies= open('movies.txt')

for rating, movie in itertools.izip(ratings, movies):
    # do task

また

ratings= open('ratings.txt').readlines()
movies= open('movies.txt').readlines()

for rating, movie in zip(ratings, movies):
    # do task
于 2012-10-30T11:26:37.623 に答える
1

問題は、seek(0) を使用して内側のループをリセットする必要があることです。これにより、ループが適切に機能するようになります。皆さんの返信に感謝します。

于 2012-10-30T15:38:04.953 に答える
0

実装は、file1 のすべての行に対して実行され、file2 のすべての行を実行します。

実際のコードは、

for line1,line2 in zip(ratings,movies):
 cont1+=1
 cont2+=1
 print(cont1,cont2)
于 2012-10-30T11:27:23.727 に答える
0
with open('ratings.txt') as ratings, open('movies.txt') as movies:
    for rating, movie in itertools.izip(ratings, movies):
        # do task

これは、 via のすべての行を読み取るのではなく、反復的に行を取得するという点で (現在廃止されている古いものと同等)、avasal の回答の改善です。そのため、それぞれから 1 行を読み取り、それらを処理し、別の行を読み取るなどして、実装が小さなファイルに限定される非常に大きなファイルを許可する必要があります。xreadlinesreadlines()readlines

izipイテレータの 1 つが停止するまで続くため、短いファイルと同じ数の行しか取得できないことに注意してください。ただし、コードは暗黙的に 2 つのファイルが一致すると想定しているため、それは正しいと思います。

于 2012-10-30T12:03:18.290 に答える