能否使用Python提取文件夹中损坏PDF文件的元数据?
提取PDF元数据(含损坏文件)并生成DataFrame的Python实现
完全可以实现,核心思路是捕获PDF读取时的异常,把损坏文件的信息(比如文件名、错误类型)一并记录,而非直接跳过。下面是具体实现方案:
依赖库准备
先安装所需的第三方库:
pip install pandas PyPDF2
完整代码示例
import os import pandas as pd from PyPDF2 import PdfReader, errors def extract_pdf_metadata(pdf_path): """提取单个PDF的元数据,捕获损坏文件的异常""" metadata = { "文件名": os.path.basename(pdf_path), "文件路径": pdf_path, "标题": None, "作者": None, "创建时间": None, "修改时间": None, "文件状态": "正常" } try: reader = PdfReader(pdf_path) info = reader.metadata # 提取常见元数据字段,兼容不同PDF的字段命名格式 metadata["标题"] = info.get("/Title") or info.get("Title") metadata["作者"] = info.get("/Author") or info.get("Author") metadata["创建时间"] = info.get("/CreationDate") or info.get("CreationDate") metadata["修改时间"] = info.get("/ModDate") or info.get("ModDate") except errors.PdfReadError: metadata["文件状态"] = "损坏(无法读取PDF结构)" except Exception as e: metadata["文件状态"] = f"异常:{str(e)}" return metadata def process_pdf_folder(folder_path): """遍历文件夹下所有PDF,收集元数据并生成DataFrame""" metadata_list = [] # 遍历文件夹内所有文件 for root, _, files in os.walk(folder_path): for file in files: if file.lower().endswith(".pdf"): pdf_path = os.path.join(root, file) metadata = extract_pdf_metadata(pdf_path) metadata_list.append(metadata) # 转换为DataFrame df = pd.DataFrame(metadata_list) return df # 示例使用 if __name__ == "__main__": target_folder = "你的PDF文件夹路径" # 替换为实际路径 result_df = process_pdf_folder(target_folder) # 保存结果到CSV(可选) result_df.to_csv("pdf_metadata.csv", index=False, encoding="utf-8-sig") # 打印前5行查看 print(result_df.head())
关键说明
- 异常处理:专门捕获
PdfReadError(PyPDF2识别的PDF损坏错误),同时用通用Exception兜底其他意外情况,确保所有文件都被处理。 - 元数据兼容:PDF的元数据字段可能有不同的命名格式(比如带/前缀或不带),代码中做了兼容处理;如果需要其他字段,可以查看
info对象的所有属性自行添加。 - 结果区分:通过
文件状态字段明确标记正常、损坏或异常的文件,方便后续筛选处理。
内容的提问来源于stack exchange,提问作者lcand
相关产品推荐
相关产品推荐

