使用python 批量将pdf转化为txt

要批量将 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:代码说明

  1. 文件夹处理

    • 自动创建保存 TXT 的文件夹(若不存在),避免因路径不存在报错。
    • 只处理 .pdf 后缀的文件,忽略其他类型文件。
  2. PDF 文本提取

    • 使用 pdfplumber.open() 打开 PDF 文件,支持多页提取。
    • page.extract_text() 提取单页文本,对复杂排版(如分栏、表格)的兼容性较好(相比 PyPDF2 更准确)。
  3. 错误处理

    • 捕获转换过程中的异常(如损坏的 PDF 文件),避免程序中断,同时打印错误信息便于排查。

特殊情况处理

  1. 扫描件 PDF(图片内容):若 PDF 是扫描件(内容为图片,非文字),pdfplumber 无法直接提取文本,需用 OCR 工具(如 pytesseract):

  2. 加密 PDF:若 PDF 有密码保护,需先解密(可手动解密后再转换,或使用 qpdf 等工具批量解密)。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值