如何用Python对一个文件夹内的所有PDF文件批量执行OCR?
批量处理文件夹内所有PDF的OCR实现
当然可以实现批量OCR处理文件夹里的所有PDF!你的现有代码已经具备单文件处理的核心逻辑,只需要添加文件夹遍历的逻辑,再修正原代码里的小疏漏(比如req_image没有填充内容),就能完成批量处理。
先提下原代码的小问题:你定义了req_image但没有把PDF转换后的JPEG页面数据添加进去,这会导致没有文本被提取,我会在修改后的代码里补上这部分。
完整批量处理代码
import os from wand.image import Image from PIL import Image as PI import pyocr import pyocr.builders import io # 初始化OCR工具和语言 tool = pyocr.get_available_tools()[0] # 注意:这里的语言索引要根据你实际安装的语言调整,比如中文是'chi_sim',英文是'eng' # 可以先运行 print(tool.get_available_languages()) 查看所有可用语言 lang = tool.get_available_languages()[1] # 配置文件夹路径 TARGET_FOLDER = "./your_pdf_folder" # 替换成你的PDF文件夹路径 OUTPUT_FOLDER = "./ocr_results" # 结果保存的文件夹,不存在则自动创建 # 创建输出文件夹 if not os.path.exists(OUTPUT_FOLDER): os.makedirs(OUTPUT_FOLDER) # 遍历文件夹内所有PDF文件 for filename in os.listdir(TARGET_FOLDER): # 筛选PDF文件(兼容大写.PDF后缀) if filename.lower().endswith(".pdf"): pdf_full_path = os.path.join(TARGET_FOLDER, filename) print(f"正在处理: {filename}") final_text = [] try: # 将PDF每页转换为JPEG图片 with Image(filename=pdf_full_path, resolution=300) as image_pdf: image_jpeg = image_pdf.convert('jpeg') # 提取每页的JPEG字节数据 req_image = [] for page_img in image_jpeg.sequence: with Image(page_img) as single_page: img_bytes = single_page.make_blob('jpeg') req_image.append(img_bytes) # 对每页执行OCR提取文本 for img_bytes in req_image: page_text = tool.image_to_string( PI.open(io.BytesIO(img_bytes)), lang=lang, builder=pyocr.builders.TextBuilder() ) final_text.append(page_text) # 将提取的文本保存为同名TXT文件 txt_filename = f"{os.path.splitext(filename)[0]}.txt" txt_full_path = os.path.join(OUTPUT_FOLDER, txt_filename) with open(txt_full_path, 'w', encoding='utf-8') as f: f.write('\n\n--- 分页分割线 ---\n\n'.join(final_text)) print(f"{filename} 处理完成,结果已保存到: {txt_full_path}") except Exception as e: print(f"处理{filename}时出错: {str(e)}")
关键逻辑说明
- 文件夹遍历:用
os.listdir扫描目标文件夹,通过endswith(".pdf")筛选PDF文件,lower()确保兼容大写后缀的文件 - PDF转图片:修正了原代码的疏漏,把PDF的每一页转换为JPEG字节数据存入列表,供OCR处理
- 结果保存:每个PDF对应生成一个同名TXT文件,保存在独立的输出文件夹里,避免文件覆盖
- 异常处理:添加
try-except块,防止单个文件处理失败导致整个程序中断
注意事项
- 确保安装所有依赖:
pip install wand pillow pyocr - 必须安装Tesseract OCR引擎:Windows需下载安装包,Linux可通过
apt install tesseract-ocr安装,还可按需安装语言包(比如中文包tesseract-ocr-chi-sim) - 语言索引可通过
print(tool.get_available_languages())查看后调整,直接用语言名称(比如lang='eng')更直观 - 分辨率
resolution=300可按需调整,更高分辨率会提升OCR准确率,但处理速度会变慢
内容的提问来源于stack exchange,提问作者sam s
相关产品推荐
相关产品推荐

