Python - 从列表中的值搜索文件
Python - search files from the values in a list
我是 Python 的新手,我正在尝试解决以下问题。我想用单词迭代列表并在文件中查找它,如果找到 return 我找到单词的行号。
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 returns 发电机。它是一个一次性迭代器,在第一个“for item in files”循环中使用。您需要将 iglob 替换为 glob(returns 一个列表而不是一次性使用的迭代器),或者为每个循环重新调用 iglob。
了解更多关于生成器的信息:
- https://wiki.python.org/moin/Generators
- Understanding generators in Python
- http://intermediatepythonista.com/python-generators
和 glob 文档:
希望这能帮助您找到正确的方向!
编辑(注):iglob 相对于 glob 的优势在于它不适用于内存中的整个列表。如果你有一个非常大的列表(很多项目 * 每个项目的内存大小),那么 iglob 可能会比 glob 具有性能优势。
我是 Python 的新手,我正在尝试解决以下问题。我想用单词迭代列表并在文件中查找它,如果找到 return 我找到单词的行号。
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 returns 发电机。它是一个一次性迭代器,在第一个“for item in files”循环中使用。您需要将 iglob 替换为 glob(returns 一个列表而不是一次性使用的迭代器),或者为每个循环重新调用 iglob。
了解更多关于生成器的信息:
- https://wiki.python.org/moin/Generators
- Understanding generators in Python
- http://intermediatepythonista.com/python-generators
和 glob 文档:
希望这能帮助您找到正确的方向!
编辑(注):iglob 相对于 glob 的优势在于它不适用于内存中的整个列表。如果你有一个非常大的列表(很多项目 * 每个项目的内存大小),那么 iglob 可能会比 glob 具有性能优势。