很抱歉,您遇到了愚蠢的新手问题,但是我的嵌套循环无法正常工作。它仅返回第一次迭代。我错过了什么?
我正在尝试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)
答案 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的说明列出它即可。