You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:编写批量PDF文件关键词筛选与移动的代码及资源

Python实现PDF关键词搜索与移动方案

依赖安装

首先安装所需的Python库:

pip install PyPDF2 shutil

如果需要处理扫描版PDF(图片格式),还需安装OCR相关工具:

pip install pdf2image pytesseract

*注:使用pytesseract需要先安装本地的Tesseract OCR引擎,可通过官方渠道下载安装,中文识别需额外配置中文语言包

代码实现

基础版(可编辑PDF)

针对可直接提取文本的PDF文件,使用以下代码:

import os
import shutil
from PyPDF2 import PdfReader

def move_pdfs_with_keyword(source_dir, target_dir, keyword):
    # 创建目标文件夹(不存在则新建)
    if not os.path.exists(target_dir):
        os.makedirs(target_dir)
    
    # 遍历源文件夹内所有文件
    for filename in os.listdir(source_dir):
        if filename.lower().endswith('.pdf'):
            file_full_path = os.path.join(source_dir, filename)
            try:
                # 读取PDF并提取文本
                with open(file_full_path, 'rb') as pdf_file:
                    reader = PdfReader(pdf_file)
                    contains_keyword = False
                    # 逐页检查文本
                    for page in reader.pages:
                        page_text = page.extract_text()
                        if page_text and keyword in page_text:
                            contains_keyword = True
                            break  # 找到关键词后停止遍历页面
                    # 移动符合条件的文件
                    if contains_keyword:
                        target_full_path = os.path.join(target_dir, filename)
                        # 处理重名文件,避免覆盖
                        if os.path.exists(target_full_path):
                            name, ext = os.path.splitext(filename)
                            count = 1
                            while os.path.exists(os.path.join(target_dir, f"{name}_{count}{ext}")):
                                count += 1
                            target_full_path = os.path.join(target_dir, f"{name}_{count}{ext}")
                        shutil.move(file_full_path, target_full_path)
                        print(f"已移动: {filename}")
            except Exception as e:
                print(f"处理{filename}出错: {str(e)}")

# 配置参数并运行
if __name__ == "__main__":
    SOURCE_DIR = "替换为你的源文件夹路径"
    TARGET_DIR = "替换为你的目标文件夹路径"
    KEYWORD = "替换为你要搜索的关键词"
    move_pdfs_with_keyword(SOURCE_DIR, TARGET_DIR, KEYWORD)

OCR版(扫描件PDF)

针对图片格式的扫描PDF,通过OCR识别文本后再搜索关键词:

import os
import shutil
from pdf2image import convert_from_path
import pytesseract

def move_scanned_pdfs_with_keyword(source_dir, target_dir, keyword):
    if not os.path.exists(target_dir):
        os.makedirs(target_dir)
    
    for filename in os.listdir(source_dir):
        if filename.lower().endswith('.pdf'):
            file_full_path = os.path.join(source_dir, filename)
            try:
                # 将PDF转换为图片
                pages = convert_from_path(file_full_path)
                contains_keyword = False
                for page in pages:
                    # OCR识别图片文本,中文需指定lang参数
                    page_text = pytesseract.image_to_string(page, lang='chi_sim')
                    if keyword in page_text:
                        contains_keyword = True
                        break
                if contains_keyword:
                    target_full_path = os.path.join(target_dir, filename)
                    if os.path.exists(target_full_path):
                        name, ext = os.path.splitext(filename)
                        count = 1
                        while os.path.exists(os.path.join(target_dir, f"{name}_{count}{ext}")):
                            count += 1
                        target_full_path = os.path.join(target_dir, f"{name}_{count}{ext}")
                    shutil.move(file_full_path, target_full_path)
                    print(f"已移动扫描件: {filename}")
            except Exception as e:
                print(f"处理扫描件{filename}出错: {str(e)}")

# 配置参数并运行
if __name__ == "__main__":
    SOURCE_DIR = "替换为你的源文件夹路径"
    TARGET_DIR = "替换为你的目标文件夹路径"
    KEYWORD = "替换为你要搜索的关键词"
    move_scanned_pdfs_with_keyword(SOURCE_DIR, TARGET_DIR, KEYWORD)

注意事项

  • 确保源文件夹和目标文件夹路径正确,支持绝对路径或相对路径
  • 代码加入了异常捕获,单个文件处理失败不会导致整个程序终止
  • 重名文件会自动添加数字后缀,避免覆盖已有文件
  • 扫描件OCR识别的准确率受PDF清晰度、字体等因素影响

学习方向

  • 学习os模块的文件遍历、路径处理方法,掌握基础文件系统操作
  • 了解shutil模块的文件移动、复制等核心功能
  • 研究PyPDF2或pdfplumber的API,掌握PDF文本提取的不同方式
  • 针对OCR场景,深入学习pytesseract的参数配置和语言包使用

内容的提问来源于stack exchange,提问作者Zaid Aldawod

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 16:18:21