首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从用于重命名的脚本中提取PDF文档的标题?

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

Stack Overflow用户
提问于 2017-06-16 22:22:54
回答 7查看 22.2K关注 0票数 19

我的电脑里有数千个PDF文件,名字从a0001.pdfa3621.pdf,每个文件里面都有一个标题;例如,a0001.pdf中的“碳酸铝”,a0002.pdf中的“硝酸铝”等等,我想提取这些文件来重命名我的文件。

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

代码语言:javascript
运行
复制
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文件中的标题来重命名该文件?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2017-06-29 15:09:37

安装软件包

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

在上,首先要确保使用pip命令获得了最新版本的pip

代码语言:javascript
运行
复制
python -m pip install -U pip

Linux

代码语言:javascript
运行
复制
pip install -U pip

在这两个平台上,然后使用

代码语言:javascript
运行
复制
pip install pdfrw

密码

我结合了zeebonk和user2125722的分析来编写一些非常紧凑和可读的东西,这与您的原始代码非常接近:

代码语言:javascript
运行
复制
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)
票数 20
EN

Stack Overflow用户

发布于 2017-06-24 19:21:02

您需要的是一个能够真正读取PDF文件的库。例如,帕德夫

代码语言:javascript
运行
复制
In [8]: from pdfrw import PdfReader

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

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

Stack Overflow用户

发布于 2017-06-29 10:59:45

您可以使用pdfminer库来解析PDF。info属性包含PDF的标题。下面是示例信息的样子:

代码语言:javascript
运行
复制
[{'CreationDate': "D:20170110095753+05'30'", 'Producer': 'PDF-XChange Printer `V6 (6.0 build 317.1) [Windows 10 Enterprise x64 (Build 10586)]', 'Creator': 'PDF-XChange Office Addin', 'Title': 'Python Basics'}]`

然后,我们可以使用字典的属性提取标题。下面是整个代码(包括迭代所有文件并重命名它们):

代码语言:javascript
运行
复制
from pdfminer.pdfparser import PDFParser
from pdfminer.pdfdocument import PDFDocument
import os

start = "0000"

def convert(var):
    while len(var) < 4:
        var = "0" + var

    return var

for i in range(1,3622):
    var = str(i)
    var = convert(var)
    file_name = "a" + var + ".pdf"
    fp = open(file_name, 'rb')
    parser = PDFParser(fp)
    doc = PDFDocument(parser)
    fp.close()
    metadata = doc.info  # The "Info" metadata
    print metadata
    metadata = metadata[0]
    for x in metadata:
        if x == "Title":
            new_name = metadata[x] + ".pdf"
            os.rename(file_name,new_name)
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44598758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档