Python pikepdf用docinfo.items()提取元数据筛选作者标题无输出
问题原因
无输出的核心原因是匹配逻辑完全没命中目标键:
pikepdf中pdf.docinfo的元数据键是内置的Name类型对象,转为普通字符串后会保留PDF规范要求的/前缀,也就是作者字段对应键为/Author、标题字段对应键为/Title,字符串首字符是斜杠,你写的str(key).startswith("A")、str(key).startswith("Ti")判断永远不会成立,if分支从未执行,自然没有任何输出。
另外你用的前缀模糊匹配逻辑鲁棒性很差,很容易误命中其他同首字母的非目标元数据字段,不推荐使用。
正确实现方法
最稳妥的方式是直接按PDF标准定义的键名取值,不需要遍历全量字段,同时做好缺省兼容:
import pikepdf # 替换为实际PDF文件路径 file_path = "target.pdf" with pikepdf.open(file_path) as pdf: # 字段不存在时返回None,避免抛出KeyError author = pdf.docinfo.get("/Author", None) title = pdf.docinfo.get("/Title", None) print(f"作者:{author}") print(f"标题:{title}")
如果必须通过docinfo.items()遍历筛选,要注意对键名做精确匹配,不要用前缀模糊判断:
import pikepdf file_path = "target.pdf" with pikepdf.open(file_path) as pdf: # 定义需要提取的目标键集合 target_keys = {"/Author", "/Title"} for key, value in pdf.docinfo.items(): key_str = str(key) if key_str in target_keys: # 去掉键名开头的斜杠优化输出格式 print(f"{key_str.lstrip('/')}: {value}")
注意:部分PDF文件本身没有写入作者、标题元数据,这种情况下提取结果为None属于正常情况,和代码逻辑无关。
内容的提问来源于stack exchange,提问作者duffy_dse
相关产品推荐
相关产品推荐

