从两个文件嵌套for循环的Python读取行

时间:2012-10-30 11:24:09

标签: python file loops line

我想将一个文本文件的行与另一个文本文件一行一行地匹配,我的嵌套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 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

问题是我需要使用seek(0)重置内部循环,这样循环才能正常工作,感谢大家的回复。

答案 2 :(得分:0)

您的实现针对file1中的每一行运行,在file2中运行所有行,

实际代码是,

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

答案 3 :(得分:0)

with open('ratings.txt') as ratings, open('movies.txt') as movies:
    for rating, movie in itertools.izip(ratings, movies):
        # do task

这是对avasal's answer的改进,因为它迭代地拾取行(相当于现在已弃用的旧xreadlines),而不是读取via readlines()中的所有行。因此它应该从每个读取一行,然后处理它们,然后读取另一行等,允许在readlines实现仅限于较小的文件的情况下的文件。

请注意,izip会继续,直到其中一个迭代器停止,因此您只能获得与较短文件一样多的行。但是,我认为这是正确的,因为代码隐含地假设两个文件仍然匹配。