零代码编程:下载的PDF文件自动批量重命名

从arxiv或者一些其他网站下载的PDF文件,标题只是创建时间,看不出里面内容是什么,要一个个打开看非常麻烦。

可以在GPT4中输入提示词:

你是一个Python编程专家,要完成一个编写关于重命名PDF文件的Python脚本的任务,具体步骤如下:

打开文件夹:D:\chatgpt图书\arvix论文;

读取这个文件夹中所有的PDF文件;

用PyPDF2库提取PDF文件的属性信息:标题;

用读取出来的PDF文件的标题属性信息重命名PDF文件;

注意:

标题属性信息中如果有不符合window文件系统命名规范的特殊符号,要去掉;

每一步都要输出相关信息到屏幕;

PyPDF2版本是3.0.0以上,该版本对API进行了重大更改,PdfFileReader已被PdfReader取代,并且utils模块也有所变动,PdfReader对象访问文档属性应当通过访问metadata属性来获取PDF的元数据

运行程序,失败,错误信息如下:

Traceback (most recent call last):

File "d:\Python\pdfautorenam.py", line 16, in <module>

title = reader.document_info.title

AttributeError: 'PdfReader' object has no attribute 'document_info'

把错误信息丢给GPT4,给出的回复是:

从 PyPDF2 的 3.0.0 版本开始,PdfReader对象访问文档属性的方式发生了变化。相比于早期版本中使用的document_info,在 3.0.0 及之后的版本中,应当通过访问metadata属性来获取PDF的元数据。

以下是根据您的需求和 PyPDF2 3.0.0 版本以上的API更改,更新后的脚本。它遍历指定文件夹中的PDF文件,从每个PDF文件读取标题,并以该标题重新命名文件

python源代码:

import os

import re

from PyPDF2 import PdfReader

# 指定文件夹路径

folder_path = "D:\\chatgpt图书\\arvix论文"

# 检索文件夹中的所有文件

for filename in os.listdir(folder_path):

if filename.endswith(".pdf"):

# 拼接完整的文件路径

pdf_path = os.path.join(folder_path, filename)

try:

# 打开每个PDF文件并读取它的属性

reader = PdfReader(pdf_path)

# 从metadata中提取PDF文件的标题

title = reader.metadata.get('/Title', None)

# 如果标题为空或未获取到标题,保持文件名不变

if not title:

print(f"'{filename}' 没有标题属性,因此不会被重命名。")

continue

# 删除在Windows系统中无法作为文件名的字符

invalid_chars = r"\/:*?\"<>|"

title = re.sub(f"[{invalid_chars}]", "", title)

# 重命名文件

new_filename = f"{title}.pdf"

new_pdf_path = os.path.join(folder_path, new_filename)

os.rename(pdf_path, new_pdf_path)

print(f"'{filename}' 已被重命名为 '{new_filename}'。")

except Exception as e:

print(f"无法处理 '{filename}'。原因:{e}")

再次运行程序,成功。