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

Par*_*aH2 15 python pdf file python-3.x

我的计算机里有成千上万的PDF文件,这些文件的名称来自a0001.pdfa3621.pdf,每个文件的内部都有一个标题; 例如,"碳酸铝" a0001.pdf,"硝酸铝" a0002.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)
Run Code Online (Sandbox Code Playgroud)

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

Man*_* CJ 14

安装包

用普通的Python无法解决这个问题.您将需要一个外部包,例如pdfrw,它允许您阅读PDF元数据.使用标准Python包管理器很容易安装pip.

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

python -m pip install -U pip
Run Code Online (Sandbox Code Playgroud)

Linux上:

pip install -U pip
Run Code Online (Sandbox Code Playgroud)

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

pip install pdfrw
Run Code Online (Sandbox Code Playgroud)

代码

我结合了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)
Run Code Online (Sandbox Code Playgroud)

  • 这非常有用,但值得一提的是,许多PDF 没有Info.Title。在我检查的 312 篇相当随机的期刊文章中,超过 1/3 没有。但这对那些这样做的人来说很棒。 (2认同)
  • 请不要指示用户将“sudo”与“pip install”一起使用。这是一个安全问题(请参阅[此处](https://askubuntu.com/a/802594/198237))。 (2认同)

zee*_*onk 7

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

In [8]: from pdfrw import PdfReader

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

In [10]: reader.Info.Title
Out[10]: 'Example PDF document'
Run Code Online (Sandbox Code Playgroud)