利用FileInput()函数实现文件内容的批量查找
发布时间:2024-01-05 20:32:16
FileInput()函数用于从一个或多个文件中读取内容。它允许我们在处理大型文件时一次只读取一行,从而减少内存占用。
下面是一个使用FileInput()函数实现文件内容批量查找的例子:
import re
from multiprocessing import Pool
from fileinput import FileInput
def search_in_file(file_name, search_pattern):
result = []
for line in FileInput(file_name):
if re.search(search_pattern, line):
result.append(line.rstrip('
'))
return result
if __name__ == '__main__':
# 需要查找的文件列表
file_list = ['file1.txt', 'file2.txt', 'file3.txt']
# 查找的模式
pattern = r'example'
# 创建进程池
pool = Pool()
# 利用进程池并行查找文件中的内容
results = pool.starmap(search_in_file, zip(file_list, [pattern] * len(file_list)))
# 输出查找结果
for file_name, result in zip(file_list, results):
if result:
print(f"在文件{file_name}中找到了匹配的行:")
for line in result:
print(line)
else:
print(f"在文件{file_name}中没有找到匹配的行。")
上面的例子中,首先定义了一个search_in_file()函数,用于在单个文件中查找匹配指定模式的内容。该函数首先打开给定的文件,然后逐行读取文件内容,并使用正则表达式搜索匹配的行,将结果添加到一个列表中。
在主程序中,我们创建了一个进程池,利用pool.starmap()方法将search_in_file()函数应用到每个文件中,以并行查找文件内容。search_in_file()函数的 个参数是文件名,第二个参数是要搜索的模式。
最后,我们使用zip()函数将文件名和查找结果对应起来,并依次输出查找结果。
需要注意的是,file_list列表中应包含需要查找的文件的路径。在上面的示例中,我们使用了相对路径,因此文件应与脚本在同一目录下或指定完整路径。此外,还需在程序中导入re模块用于正则表达式,以及multiprocessing.Pool模块用于创建进程池。
