Python3 如何从文件夹下的很多PDF中找出要搜索的关键字

在日常工作中,我们经常需要从大量的PDF文件中寻找特定的关键字。而手动打开每个文件进行搜索是非常耗时耗力的。幸运的是,Python 提供了强大的库来处理 PDF 文件,并且可以很容易地进行文本搜索。在本文中,我们将学习如何使用 Python 从文件夹中的多个 PDF 文件中找出要搜索的关键字。

准备工作

在开始之前,我们需要安装以下 Python 库:

  • PyPDF2:一个用于处理 PDF 文件的库,可以进行内容提取和搜索。
  • os:Python 的内置库,用于处理文件和目录路径。
  • re:Python 的内置库,用于进行正则表达式匹配。

可以使用以下命令安装这些库:

pip install PyPDF2

实现步骤

  1. 导入所需的库:
import PyPDF2
import os
import re
  1. 定义一个函数,用于搜索关键字并返回匹配的页面和文件名:
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 库读取文件内容。然后,它逐页提取文本,并使用正则表达式进行搜索。如果找到匹配的关键字,就将页码和文件名添加到匹配列表中。

  1. 定义一个函数,用于搜索整个文件夹:
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 函数进行搜索。搜索结果将累积到匹配列表中。

  1. 使用函数进行搜索并打印结果:
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