欢迎访问宙启技术站
智能推送

利用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模块用于创建进程池。