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

如何使用Python提取文件夹中所有PDF文件的元数据?

批量提取文件夹内所有PDF文件的元数据

当然可以实现批量处理,以下是基于你现有代码扩展的完整解决方案,能遍历指定文件夹下的所有PDF文件并提取元数据:

import os
from pdfminer.pdfparser import PDFParser
from pdfminer.pdfdocument import PDFDocument

def get_pdf_metadata(pdf_file_path):
    try:
        with open(pdf_file_path, 'rb') as file:
            parser = PDFParser(file)
            doc = PDFDocument(parser)
            
            # 处理元数据的字节转字符串,避免乱码
            formatted_metadata = {}
            for info_entry in doc.info:
                for key, val in info_entry.items():
                    decoded_key = key.decode('utf-8', errors='replace')
                    decoded_val = val.decode('utf-8', errors='replace') if isinstance(val, bytes) else val
                    formatted_metadata[decoded_key] = decoded_val
            
            return formatted_metadata
    except Exception as e:
        return {"提取失败": str(e)}

def batch_process_pdf_folder(folder_path):
    # 遍历文件夹,筛选所有PDF文件(忽略大小写)
    for file_name in os.listdir(folder_path):
        if file_name.lower().endswith('.pdf'):
            full_file_path = os.path.join(folder_path, file_name)
            print(f"--- {file_name} 的元数据 ---")
            metadata = get_pdf_metadata(full_file_path)
            for k, v in metadata.items():
                print(f"{k}: {v}")
            print("\n")

# 替换为你的目标文件夹路径
if __name__ == "__main__":
    target_folder = "/你要处理的文件夹路径"
    batch_process_pdf_folder(target_folder)

关键改进点:

  • 用os模块遍历文件夹,通过lower().endswith('.pdf')兼容大小写不同的PDF文件名(比如.PDF)
  • 封装单个PDF处理函数,加入异常捕获,避免某个损坏/加密的PDF导致整个脚本崩溃
  • 将元数据中的字节类型解码为字符串,解决原脚本输出中可能出现的b'xxx'字节显示问题
  • 格式化输出每个文件的元数据,可读性更强

如果遇到加密的PDF文件,你可以给PDFDocument初始化时传入密码参数(doc = PDFDocument(parser, password="你的密码"))来适配解密逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 05:42:15