|
10鱼币
原批量PDF文件搜索关键字代码
import os
from PyPDF2 import PdfReader
def search_keywords_in_pdf(directory, keyword):
files = os.listdir(directory)
for file in files:
if file.endswith('.pdf'):
file_path = os.path.join(directory, file)
with open(file_path, 'rb') as f:
pdf = PdfReader(f)
for page_num, page in enumerate(pdf.pages, start=1):
text = page.extract_text()
if keyword in text:
print(f"found '{keyword}' in {file} (Page {page_num})")
# 指定要搜索的目录和关键字
directory = r'e:\年报'
keyword = input('请输入要查询的内容')
search_keywords_in_pdf(directory, keyword)
因为PDF文件较多,现在要加入多进程多线程,该如何修改
from concurrent.futures import ThreadPoolExecutor
import multiprocessing
# 设置线程池的最大线程数或进程池的最大进程数
max_workers = multiprocessing.cpu_count()
# 定义线程池或进程池
with ThreadPoolExecutor(max_workers=max_workers) as executor:
你可以将原始代码修改为使用多线程来处理PDF文件的搜索任务。下面是修改后的代码示例:
- import os
- from PyPDF2 import PdfReader
- from concurrent.futures import ThreadPoolExecutor
- import multiprocessing
- def search_keywords_in_pdf(file_path):
- with open(file_path, 'rb') as f:
- pdf = PdfReader(f)
- for page_num, page in enumerate(pdf.pages, start=1):
- text = page.extract_text()
- if keyword in text:
- print(f"found '{keyword}' in {file_path} (Page {page_num})")
- def search_files_in_directory(directory, keyword):
- files = os.listdir(directory)
-
- with ThreadPoolExecutor(max_workers=multiprocessing.cpu_count()) as executor:
- for file in files:
- if file.endswith('.pdf'):
- file_path = os.path.join(directory, file)
- executor.submit(search_keywords_in_pdf, file_path)
- # 指定要搜索的目录和关键字
- directory = r'e:\年报'
- keyword = input('请输入要查询的内容:')
- search_files_in_directory(directory, keyword)
复制代码
这里使用了`concurrent.futures.ThreadPoolExecutor`来创建一个线程池,并设置最大线程数为计算机的 CPU 核心数,以便同时处理多个文件的搜索任务。请根据需要调整`max_workers`的值。
每个线程会执行`search_keywords_in_pdf`函数来搜索指定文件中是否包含关键字。通过`executor.submit`方法提交任务给线程池执行。
注意:在多线程环境中,需要确保相关资源的线程安全性,例如`print`语句可能在打印时产生混乱的输出。如果需要保持输出的顺序,可以将结果保存在列表中,然后在任务执行完成后按顺序打印结果。
|
最佳答案
查看完整内容
你可以将原始代码修改为使用多线程来处理PDF文件的搜索任务。下面是修改后的代码示例:
这里使用了`concurrent.futures.ThreadPoolExecutor`来创建一个线程池,并设置最大线程数为计算机的 CPU 核心数,以便同时处理多个文件的搜索任务。请根据需要调整`max_workers`的值。
每个线程会执行`search_keywords_in_pdf`函数来搜索指定文件中是否包含关键字。通过`executor.submit`方法提交任务给线程池执行。
注意:在多线程 ...
|