Python-从列表中的值搜索文件

Python-从列表中的值搜索文件,python,python-3.x,list,filesystems,python-3.6,Python,Python 3.x,List,Filesystems,Python 3.6,我对Python非常陌生,我正在尝试解决以下问题。我想用单词迭代列表并在文件中查找,如果找到,请返回找到单词的行号 files = glob.iglob(os.path.join(in_dir, '*.*')) List = ['word1', 'word2',...'wordn'] for index, word in enumerate(List): print(index, word) for item in files: # Iterate all files in

我对Python非常陌生,我正在尝试解决以下问题。我想用单词迭代列表并在文件中查找,如果找到,请返回找到单词的行号

files = glob.iglob(os.path.join(in_dir, '*.*'))
List = ['word1', 'word2',...'wordn']

for index, word in enumerate(List):
    print(index, word)

    for item in files: # Iterate all files in Input directory
        filename = os.path.basename(item) # Copy the filename without the path
        print('file: {0}'.format(filename))
        with open(item, 'r') as f:
            for num, line in enumerate(f, 0):
                if word in line:
                    print('num: {0}, line: {1}'.format(num, line))

但它似乎不起作用,它只搜索了列表中的第一个值。我要做的是搜索每个文件中的所有列表值。

我认为您的问题在于iglob返回一个生成器。它是一个一次性迭代器,get在第一个“for item in files”循环中使用。您需要用glob替换iglob(返回一个列表而不是一次性使用的迭代器),或者为每个循环重新调用iglob

了解有关发电机的更多信息:

和全球文件:

希望这能帮你找到正确的方向

编辑(注意):与glob相比,iglob的优势在于它不能处理内存中的整个列表。如果您有一个非常庞大的列表(很多项*每个项的内存大小),那么iglob可能比glob具有性能优势