如何修改Python PDFMiner单文件提取脚本实现批量PDF转同名TXT
批量PDF提取文本修改方案
核心调整说明
- 把原单文件处理逻辑封装为独立函数,每次处理新PDF时自动重置文本变量,解决多文件内容叠加仅生成1份TXT的问题
- 修正路径拼接逻辑,使用
os.path.join生成标准路径,自动匹配PDF文件名生成对应TXT文件,完全避免误覆盖源PDF的问题 - 新增单文件异常捕获逻辑,某份PDF提取失败不会中断整个批量任务
完整可运行代码
import os from pdfminer.pdfparser import PDFParser from pdfminer.pdfdocument import PDFDocument from pdfminer.pdfpage import PDFPage from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter from pdfminer.pdfpage import PDFTextExtractionNotAllowed from pdfminer.layout import LAParams, LTTextBox, LTTextLine from pdfminer.converter import PDFPageAggregator # 仅需修改此处为你的PDF存放文件夹路径 base_path = "C://some_folder" password = "" def extract_single_pdf(pdf_path, txt_path): extracted_text = "" # 打开PDF文件 with open(pdf_path, "rb") as fp: parser = PDFParser(fp) document = PDFDocument(parser, password) if not document.is_extractable: raise PDFTextExtractionNotAllowed # 初始化提取工具 rsrcmgr = PDFResourceManager() laparams = LAParams() device = PDFPageAggregator(rsrcmgr, laparams=laparams) interpreter = PDFPageInterpreter(rsrcmgr, device) # 逐页处理 for page in PDFPage.create_pages(document): interpreter.process_page(page) layout = device.get_result() for lt_obj in layout: if isinstance(lt_obj, LTTextBox) or isinstance(lt_obj, LTTextLine): extracted_text += lt_obj.get_text() # 输出TXT文件 with open(txt_path, "wb") as f: f.write(extracted_text.encode("utf-8")) # 遍历文件夹下所有PDF文件 for filename in os.listdir(base_path): # 筛选PDF文件,不区分大小写 if filename.lower().endswith(".pdf"): pdf_full_path = os.path.join(base_path, filename) # 生成同名TXT文件路径 txt_filename = os.path.splitext(filename)[0] + ".txt" txt_full_path = os.path.join(base_path, txt_filename) try: extract_single_pdf(pdf_full_path, txt_full_path) print(f"处理完成:{filename}") except Exception as e: print(f"处理失败:{filename},错误信息:{str(e)}") print("全部任务处理完毕!")
使用说明
- 提前安装依赖:执行
pip install pdfminer.six完成依赖安装 - 将代码中
base_path替换为你存放PDF的文件夹实际路径即可运行 - 所有提取完成的TXT文件会和源PDF存放在同一目录,文件名与PDF完全一致仅后缀改为
.txt
内容的提问来源于stack exchange,提问作者Simnicjon
相关产品推荐
相关产品推荐

