嵌套循环在python中失败

时间:2019-01-10 14:00:33

标签: python

很抱歉,您遇到了愚蠢的新手问题,但是我的嵌套循环无法正常工作。它仅返回第一次迭代。我错过了什么?

我正在尝试grep在我的主文件中输入多个字符串。我想我弄乱了缩进,但是我尝试的所有变体都返回错误。

f = open('GRCh37_genes_all_mod.txt', 'rU') # main search file
f1 = open('genes_regions_out.txt', 'a') #out file
f2 = open('gene_list.txt', 'r') # search list

for gene in f2:
    for line in f:
            if gene in line:
                    print line
                    f1.write(line)

2 个答案:

答案 0 :(得分:1)

您只能遍历一个文件一次。第一次经过f之后,下次尝试运行for line in f时,将不会获得任何内容。

如果要多次遍历文件的内容,可以将该内容放入列表中。

with open('GRCh37_genes_all_mod.txt', 'rU') as f:
    contents = list(f)

with open('gene_list.txt', 'r') as f:
    genes = list(f)

for gene in genes:
    for line in contents:
        ...

答案 1 :(得分:1)

第一次迭代后,文件指针位于文件的末尾,并且迭代器已耗尽(对next(f)的调用将引发StopIteration)。

这种情况下最简单的解决方案是使用f.seek(0)重置文件指针:

for gene in f2:
    f.seek(0)
    for line in f: 
       # ...

对于其他可迭代项(可能不是“可重置的”),如果知道需要多少“副本”,则可以使用itertools.tee(),或者,如果知道可迭代项是有限的(某些可迭代项是无限的) ),所有内容都将存储在内存中,您只需按照Khelwood的说明列出它即可。