python parse只打印列表中的第一行

时间:2014-07-20 10:27:05

标签: python list

我有一个列表'a',我需要用文本文件'hello.txt'的行打印列表中所有匹配的字母。但是它只打印列表和行中的第一个单词而不是所有列表和行

a=['comp','graphics','card','part']

with open('hello.txt', 'r') as f:
    for key in a:
        for line in f:
            if key in line:
                print line, key

结果为:

comp and python
comp

期望的输出:

comp and python
comp
graphics and pixel
graphics
micro sd card
card
python part
part

请帮助我获得欲望输出。答案将不胜感激!

1 个答案:

答案 0 :(得分:7)

文件对象f是一个迭代器。 Once you've iterated it, it's exhausted,因此您的for line in f:循环仅适用于第一个密钥。将这些行存储在list中,然后就可以了。

a=['comp','graphics','card','part']
with open('hello.txt', 'r') as f:
    lines = f.readlines()  # loop the file once and store contents in list
    for key in a:
        for line in lines:
            if key in line:
                print line, key

或者,您也可以交换循环,因此只迭代文件一次。如果文件非常大,这可能会更好,因为您不必一次将所有内容加载到内存中。当然,这样你的输出可能是不同的(不同的顺序)。

a=['comp','graphics','card','part']
with open('hello.txt', 'r') as f:
    for line in f:     # now the file is only done once...
        for key in a:  # ... and the key loop is done multiple times
            if key in line:
                print line, key

或者,正如Lukas在评论中所建议的那样,使用原始循环并通过在外部f.seek(0)循环的每次迭代中调用key来“重置”文件迭代器。