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

遍历PDF目录合并为单个TXT文件时遇PyPDF2报错求助

问题分析与修复

核心问题点

  • 未过滤目录中的非PDF文件,导致PdfFileReader尝试解析无效文件,抛出EOF marker not found错误
  • 每次循环用'w'模式写入文件,会清空之前的内容,最终仅保留最后一个PDF的内容(若未报错)
  • 重复创建PdfFileReader实例,既低效又可能引发文件读取异常
  • 异常处理过于宽泛,无法定位具体问题;手动关闭文件属于多余操作(with语句会自动管理文件生命周期)

修复后的代码

import os
from PyPDF2 import PdfFileReader, PdfReadError

# 替换为你的目标目录路径
target_dir = "path"

# 用追加模式打开输出文件,避免每次清空已有内容
with open('file.txt', 'a', encoding='utf-8') as output_file:
    # 遍历目录,仅处理后缀为.pdf的文件
    for filename in os.listdir(target_dir):
        if not filename.lower().endswith('.pdf'):
            continue
        
        file_path = os.path.join(target_dir, filename)
        print(f"正在处理: {file_path}")
        
        try:
            # 单个PDF仅创建一次阅读器实例
            pdf_reader = PdfFileReader(file_path, strict=False)
            total_pages = pdf_reader.numPages
            
            for page_num in range(total_pages):
                print(f"页码: {page_num + 1}/{total_pages}")
                page = pdf_reader.getPage(page_num)
                
                try:
                    text = page.extractText()
                except Exception as e:
                    print(f"提取页码{page_num + 1}失败: {str(e)}")
                    continue
                
                # 写入文件标识与页码内容,提升可读性
                output_file.write(f"=== 文件: {filename} 页码: {page_num + 1} ===\n")
                output_file.write(text + "\n\n")
                
        except PdfReadError as e:
            print(f"解析PDF失败 {file_path}: {str(e)}")
            continue

关键优化说明

  • 增加PDF文件过滤:通过filename.lower().endswith('.pdf')确保只处理合法PDF文件
  • 切换写入模式为'a':每次循环追加内容,保留所有PDF的文本信息
  • 复用PdfFileReader实例:每个PDF仅创建一次阅读器,提升效率并避免重复读取问题
  • 细化异常处理:分别捕获PDF解析错误和文本提取错误,方便排查具体问题
  • 移除多余的file.close():with语句会自动关闭文件,无需手动操作
  • 添加文件和页码标识:方便区分不同PDF的内容,提升合并后文本的可读性

内容的提问来源于stack exchange,提问作者mxrdybxm

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 13:26:00