You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 18:15:04