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导出。

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