使用PyPDF2提取PDF首页后文件损坏,求排查脚本问题
PDF第一页提取脚本的问题修复
你的脚本存在多处关键错误,导致生成的PDF文件损坏无法读取,具体问题和修复方案如下:
核心错误点
- PdfWriter用法完全错误:你把提取的文本和文件名拼接后传给
PdfWriter,这不符合API规范。PdfWriter初始化不需要这类参数,应该创建空实例后再添加页面。 - 未执行写入操作:创建
PdfWriter后,没有调用write()方法将内容写入输出流,导致生成的文件没有有效PDF数据。 - 输出路径逻辑混乱:直接用输入文件名作为输出路径,没有放到指定的
output_directory,且未提前创建输出目录(目录不存在时会直接报错)。 - 未过滤非PDF文件:遍历目录时没有判断文件类型,遇到非PDF文件会直接抛出异常。
修复后的完整脚本
import os from PyPDF2 import PdfReader, PdfWriter input_directory = "Fund_Docs_Sample" output_directory = "First Pages" # 确保输出目录存在,不存在则自动创建 os.makedirs(output_directory, exist_ok=True) # 遍历输入目录下的所有文件 for input_file_name in os.listdir(input_directory): # 只处理PDF格式文件 if not input_file_name.lower().endswith(".pdf"): continue # 用系统兼容的方式拼接路径,避免Windows/Linux路径分隔符问题 input_path = os.path.join(input_directory, input_file_name) # 构造输出文件名(添加前缀避免覆盖原文件) output_file_name = f"FirstPage_{input_file_name}" output_path = os.path.join(output_directory, output_file_name) try: reader = PdfReader(input_path) # 检查PDF是否至少包含一页 if len(reader.pages) < 1: print(f"{input_file_name} 无有效页面可提取") continue # 正确初始化PdfWriter并添加第一页 writer = PdfWriter() writer.add_page(reader.pages[0]) # 将内容写入输出文件 with open(output_path, "wb") as output_stream: writer.write(output_stream) print(f"已完成:{input_file_name} → {output_path}") except Exception as e: print(f"处理 {input_file_name} 失败:{str(e)}")
修复说明
- 新增
os.makedirs确保输出目录存在,避免路径错误 - 过滤非PDF文件,防止无效文件触发异常
- 使用
os.path.join拼接路径,适配不同操作系统 - 正确调用
PdfWriter的add_page和write方法生成有效PDF - 添加异常捕获,方便排查单个文件的处理问题
内容的提问来源于stack exchange,提问作者Data_Science_Mick
相关产品推荐
相关产品推荐

