Python3 如何从文件夹下的很多PDF中找出要搜索的关键字
在日常工作中,我们经常需要从大量的PDF文件中寻找特定的关键字。而手动打开每个文件进行搜索是非常耗时耗力的。幸运的是,Python 提供了强大的库来处理 PDF 文件,并且可以很容易地进行文本搜索。在本文中,我们将学习如何使用 Python 从文件夹中的多个 PDF 文件中找出要搜索的关键字。
准备工作
在开始之前,我们需要安装以下 Python 库:
- PyPDF2:一个用于处理 PDF 文件的库,可以进行内容提取和搜索。
- os:Python 的内置库,用于处理文件和目录路径。
- re:Python 的内置库,用于进行正则表达式匹配。
可以使用以下命令安装这些库:
pip install PyPDF2
实现步骤
- 导入所需的库:
import PyPDF2
import os
import re
- 定义一个函数,用于搜索关键字并返回匹配的页面和文件名:
def search_keyword_in_pdf(keyword, pdf_file):
pdf = open(pdf_file, 'rb')
reader = PyPDF2.PdfReader(pdf)
matches = []
for page_num in range(len(reader.pages)):
page = reader.pages[page_num]
text = page.extract_text()
if re.search(keyword, text, re.IGNORECASE):
matches.append((page_num + 1, os.path.basename(pdf_file)))
pdf.close()
return matches
这个函数接收两个参数:要搜索的关键字和 PDF 文件的路径。它打开 PDF 文件,并使用 PyPDF2 库读取文件内容。然后,它逐页提取文本,并使用正则表达式进行搜索。如果找到匹配的关键字,就将页码和文件名添加到匹配列表中。
- 定义一个函数,用于搜索整个文件夹:
def search_folder(folder_path, keyword):
matches = []
for root, dirs, files in os.walk(folder_path):
for file in files:
if file.endswith('.pdf'):
matches += search_keyword_in_pdf(keyword, os.path.join(root, file))
return matches
这个函数接收两个参数:要搜索的文件夹的路径和关键字。它使用 os.walk 函数遍历文件夹下的所有文件和子文件夹。对于每个文件,如果它的扩展名是 .pdf,则调用前面定义的 search_keyword_in_pdf 函数进行搜索。搜索结果将累积到匹配列表中。
- 使用函数进行搜索并打印结果:
folder_path = '/path/to/folder'
keyword = 'example'
matches = search_folder(folder_path, keyword)
if len(matches) > 0:
print('找到以下匹配项:')
for match in matches:
print(f'页码:{match[0]},文件名:{match[1]}')
else:
print('未找到匹配项。')
将 /path/to/folder
替换为要搜索的文件夹的路径,将 example
替换为要搜索的关键字。运行脚本后,它将在控制台输出找到的匹配项的页码和文件名。
以上就是如何使用 Python 从文件夹中的多个 PDF 文件中找出要搜索的关键字的实现方法。通过使用 PyPDF2 库和正则表达式,我们可以轻松地处理 PDF 文件并进行文本搜索。
序列图
下面是一个使用上述代码实现搜索的序列图示例:
sequenceDiagram
participant User
participant PythonScript
participant PDFFile
participant PyPDF2Library
participant OSModule
participant RegularExpressionModule
User->>PythonScript: 指定文件夹路径和关键字
PythonScript->>OSModule: 调用 os.walk 遍历文件夹
OSModule->>PythonScript: 返回文件和子文件夹信息
PythonScript->>PyPDF2Library: 打开 PDF 文件
PyPDF2Library->>PythonScript: 返回 PDF 读取器
PythonScript->>PDFFile: 提取页面文本
PDFFile->>PDFFile: 提取页面文本
PDFFile-->>PythonScript: 页面文本
Python