我想将一个文本文件的行与另一个文本文件一行一行地匹配,我的嵌套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
>>>
答案 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
会继续,直到其中一个迭代器停止,因此您只能获得与较短文件一样多的行。但是,我认为这是正确的,因为代码隐含地假设两个文件仍然匹配。