如何使用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
相关产品推荐
相关产品推荐

