要批量将 PDF 文件转换为 TXT,可以使用 Python 的第三方库实现。常用的库有 pdfplumber(适合文本型 PDF)和 PyPDF2,其中 pdfplumber 对复杂排版的 PDF 支持更好,提取文本更准确。以下是具体实现步骤:
步骤 1:安装必要库
推荐使用 pdfplumber(处理文本型 PDF 效果佳),若 PDF 包含扫描件(图片内容),则需要额外的 OCR 库(如 pytesseract,但复杂度较高)。这里先介绍文本型 PDF 的转换:
pip install pdfplumber
步骤 2:批量转换代码
以下代码可批量读取指定文件夹中的所有 PDF 文件,将其内容提取为 TXT 并保存到目标文件夹:
import os
import pdfplumber
def batch_pdf_to_txt(pdf_folder, txt_folder):
"""
批量将PDF文件夹中的所有PDF转换为TXT
:param pdf_folder: 存放PDF文件的文件夹路径
:param txt_folder: 保存TXT文件的文件夹路径
"""
# 1. 检查PDF源文件夹是否存在(新增:提前排查路径错误)
if not os.path.exists(pdf_folder):
print(f"错误:PDF源文件夹不存在 -> {pdf_folder}")
return # 直接退出函数,避免后续无效执行
# 2. 创建保存TXT的文件夹(若不存在)
if not os.path.exists(txt_folder):
os.makedirs(txt_folder)
print(f"已创建TXT保存文件夹 -> {txt_folder}")
# 3. 遍历PDF文件夹中的所有文件
# 新增:获取所有PDF文件(避免遍历非PDF文件)
pdf_files = [f for f in os.listdir(pdf_folder) if f.lower().endswith(".pdf")]
if not pdf_files:
print(f"警告:PDF源文件夹中未找到任何PDF文件 -> {pdf_folder}")
return
print(f"共发现 {len(pdf_files)} 个PDF文件,开始批量转换...")
# 4. 逐个转换PDF为TXT
for filename in pdf_files:
pdf_path = os.path.join(pdf_folder, filename)
# 生成TXT文件名(与PDF同名,保持原文件名格式)
txt_filename = os.path.splitext(filename)[0] + ".txt"
txt_path = os.path.join(txt_folder, txt_filename)
try:
# 打开PDF并逐页提取文本(pdfplumber支持复杂排版)
with pdfplumber.open(pdf_path) as pdf:
all_text = ""
for page_num, page in enumerate(pdf.pages, 1): # 记录页码,便于排查空页
page_text = page.extract_text()
if page_text:
# 新增:添加页码标记(方便后续对应PDF原文)
all_text += f"=== 第{page_num}页 ===\n"
all_text += page_text + "\n\n" # 页间空两行,区分更清晰
# 写入TXT文件(用utf-8编码,避免中文乱码)
with open(txt_path, "w", encoding="utf-8") as f:
f.write(all_text)
print(f"✅ 转换成功:{filename} -> {txt_filename}")
# 优化:分类型捕获异常,给出具体原因
except PermissionError:
print(f"❌ 转换失败 {filename}:权限不足,无法读取PDF文件或写入TXT文件")
except FileNotFoundError:
print(f"❌ 转换失败 {filename}:PDF文件不存在(可能被删除或移动)")
except Exception as e:
# 捕获其他异常(如PDF损坏、加密等),显示具体错误信息
print(f"❌ 转换失败 {filename}:未知错误 -> {str(e)}")
# ----------------------
# 主函数:执行批量转换
# ----------------------
if __name__ == "__main__":
# 关键修正:路径用【双反斜杠\\】或【斜杠/】,避免转义错误
# 方式1:双反斜杠(Windows系统推荐,兼容性更好)
pdf_folder = "D:\\大四上文件\\英语\\cet6_pdfs"
txt_folder = "D:\\大四上文件\\英语\\cet6_txts"
# 方式2:斜杠(Python跨系统通用,无需担心转义)
# pdf_folder = "D:/大四上文件/英语/cet6_pdfs"
# txt_folder = "D:/大四上文件/英语/cet6_txts"
# 执行批量转换
batch_pdf_to_txt(pdf_folder, txt_folder)
步骤 3:代码说明
-
文件夹处理:
- 自动创建保存 TXT 的文件夹(若不存在),避免因路径不存在报错。
- 只处理
.pdf后缀的文件,忽略其他类型文件。
-
PDF 文本提取:
- 使用
pdfplumber.open()打开 PDF 文件,支持多页提取。 page.extract_text()提取单页文本,对复杂排版(如分栏、表格)的兼容性较好(相比PyPDF2更准确)。
- 使用
-
错误处理:
- 捕获转换过程中的异常(如损坏的 PDF 文件),避免程序中断,同时打印错误信息便于排查。
特殊情况处理
-
扫描件 PDF(图片内容):若 PDF 是扫描件(内容为图片,非文字),
pdfplumber无法直接提取文本,需用 OCR 工具(如pytesseract): -
加密 PDF:若 PDF 有密码保护,需先解密(可手动解密后再转换,或使用
qpdf等工具批量解密)。
2260

被折叠的 条评论
为什么被折叠?



