如何从重命名脚本中提取 PDF 文档的标题?

新手上路,请多包涵

我的计算机中有数千个 PDF 文件,名称从 a0001.pdfa3621.pdf ,每个文件里面都有一个标题;例如 --- 中的“碳酸铝”, a0002.pdf a0001.pdf 中的“硝酸铝”等,我想提取它们以重命名我的文件。

我使用这个程序重命名文件:

 path=r"C:\Users\YANN\Desktop\..."

old='string 1'
new='string 2'

def rename(path,old,new):
    for f in os.listdir(path):
        os.rename(os.path.join(path, f), os.path.join(path, f.replace(old, new)))

rename(path,old,new)

我想知道是否有解决方案来提取嵌入在 PDF 文件中的标题以重命名文件?

原文由 ParaH2 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

安装包

这不能用普通的 Python 解决。您将需要一个外部包,例如 pdfrw ,它允许您读取 PDF 元数据。使用标准 Python 包管理器 pip 安装非常简单。

Windows 上,首先确保您拥有最新版本的 pip 使用 shell 命令:

 python -m pip install -U pip

Linux 上

 pip install -U pip

在两个平台上,安装 pdfrw 包使用

pip install pdfrw

编码

我结合了 zeebonk 和 user2125722 的答案来写一些非常紧凑和可读的东西,它接近你的原始代码:

 import os
from pdfrw import PdfReader

path = r'C:\Users\YANN\Desktop'

def renameFileToPDFTitle(path, fileName):
    fullName = os.path.join(path, fileName)
    # Extract pdf title from pdf file
    newName = PdfReader(fullName).Info.Title
    # Remove surrounding brackets that some pdf titles have
    newName = newName.strip('()') + '.pdf'
    newFullName = os.path.join(path, newName)
    os.rename(fullName, newFullName)

for fileName in os.listdir(path):
    # Rename only pdf files
    fullName = os.path.join(path, fileName)
    if (not os.path.isfile(fullName) or fileName[-4:] != '.pdf'):
        continue
    renameFileToPDFTitle(path, fileName)

原文由 Manu CJ 发布,翻译遵循 CC BY-SA 4.0 许可协议

您需要的是一个可以实际读取 PDF 文件的库。例如 pdfrw

 In [8]: from pdfrw import PdfReader

In [9]: reader = PdfReader('example.pdf')

In [10]: reader.Info.Title
Out[10]: 'Example PDF document'

原文由 zeebonk 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题