从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}")
再次运行程序,成功。