我的知识记录

Python批量读取文件夹所有PDF文字 汇总教程

用Python遍历文件夹下所有PDF,逐本提取文字并汇总成一个txt/Excel清单,适合做资料归档、全文检索前处理。

场景痛点

手里堆了几十个PDF合同、标书、说明书,想把里面的文字全部导出来做一次关键词检索,或者归档到语料库。手动一个个打开、复制、保存,几百个文件想都不敢想。用Python脚本遍历整个文件夹,自动把每份PDF的文字抽出来,按文件名汇总成一个大文本,几秒钟跑完。

用到的库

pip install pdfplumber

完整代码

# -*- coding: utf-8 -*-
"""
批量读取文件夹下所有 PDF,把文字汇总到一个 txt 文件
"""
import os
import pdfplumber


def batch_read_pdfs(folder: str, out_txt: str = "all_pdf_text.txt") -> None:
"""
遍历 folder 下所有 .pdf 文件,提取文字汇总写入 out_txt
"""
# 收集所有 pdf 文件(含子目录)
pdf_files = []
for root, dirs, files in os.walk(folder):
for name in files:
if name.lower().endswith(".pdf"):
pdf_files.append(os.path.join(root, name))

pdf_files.sort()
print(f"共发现 {len(pdf_files)} 个 PDF 文件")

with open(out_txt, "w", encoding="utf-8") as out:
for idx, path in enumerate(pdf_files, start=1):
# 写入分隔头,标注文件名和相对路径
out.write(f"\n\n########## [{idx}/{len(pdf_files)}] {path} ##########\n")
try:
with pdfplumber.open(path) as pdf:
for page_no, page in enumerate(pdf.pages, start=1):
text = page.extract_text() or ""
out.write(f"\n--- 第{page_no}页 ---\n{text}")
print(f"OK: {path}")
except Exception as e:
# 单个文件失败不影响其他文件
out.write(f"\n[读取失败: {e}]")
print(f"FAIL: {path} -> {e}")

print(f"全部完成,汇总文件: {out_txt}")


if __name__ == "__main__":
batch_read_pdfs("./待处理PDF")

代码讲解

  • os.walk() 递归遍历文件夹,把所有 .pdf(不分大小写)路径收集起来,sort() 保证处理顺序稳定。
  • 外层用一个大 with open(out_txt, "w", encoding="utf-8") 写汇总文件,所有PDF的内容都追加到这里。
  • 每个PDF前写一个 ########## 分隔头,标注序号和文件路径,方便后续用文本编辑器按文件名跳转。
  • 内层 try/except 包住单个文件,遇到加密、损坏、扫描件不会中断整个批量任务。
  • 输出统一用 UTF-8,避免中文乱码。

运行结果

控制台逐个打印处理进度,最后在当前目录生成 all_pdf_text.txt。用VSCode或记事本打开,每份PDF之间有清晰的分隔标记,可以直接Ctrl+F做全文检索。

注意事项

  • 扫描件PDF提取出来是空段,这种文件需要先OCR。
  • 加密PDF会直接抛异常,脚本会捕获并记录"读取失败",不影响其他文件。
  • 如果文件量很大(上千个),汇总txt会很大,建议改成按子文件夹分多个txt。
  • 想按Excel一行一份PDF输出"文件名+字符数+摘要",可以在外层再维护一个列表最后用pandas导出。

Python批量读取文件夹所有PDF文字 汇总教程

标签:

更新时间:2026-09-14 21:40:49

上一篇:Python压缩PDF文件体积:垃圾回收+图片降采样

下一篇:Python批量打印PDF:自动发送到打印机