利用Python的PyPDF2库,根据论文标题批量修改pdf的文件名

PyPDF2

  • 工作中可能会涉及处理pdf文件,PyPDF2就是这样一个库, 使用它可以轻松的处理pdf文件,它提供了读、写、分割、合并、文件转换等多种操作。
  • 官方地址,了解更多。

任务背景

  • DBLP数据库或者其他网站下载数篇论文,将论文集放在一个文件夹里。
    文件夹中有七篇论文pdf
  • 论文的pdf文件名可能为乱码,我们将利用PyPDF2,读取和输出论文pdf的标题,最后将每篇论文的文件名改为论文的标题。
  • 需要注意的是,PyPDF2的使用有局限性,PDF的格式或者编码可能使我们使用中出现PyPDF2.utils.PdfReadError或者AttributeError等等错误,导致我们的论文集无法全部修改;使用的过程中也可能出现读取标题为None的情况。所以不能保证所有论文都能够正确修改,但在我的使用过程中,能把大部分论文都修改了,剩下一小部分手改就好。

任务

pip安装PyPDF2

pip install pypdf2

引入函数库

import os
import PyPDF2
from PyPDF2 import PdfFileReader

利用os读取路径下的论文pdf文件

path = './pdfs'.replace('\\', '/')
paper_name = os.listdir(path)
print(paper_name)

i = 0
  • 输出:
 ['5328-Article Text-8553-1-10-20200508.pdf', '5329-Article Text-8554-1-10-20200508.pdf', '5330-Article Text-8555-1-10-20200508.pdf', '5331-Article Text-8556-1-10-20200508.pdf', '5332-Article Text-8557-1-10-20200508.pdf', '5334-Article Text-8559-1-10-20200508.pdf']

注意,这里定义了一个 i = 1,之后会添加到文件名中,为了防止更改文件名后出现重复现象。

用PyPDF2读取路径下的每个pdf文件

for temp in paper_name:
    print(temp)
    pdf_file = open(path + '/' + temp, 'rb')
    pdf_reader = PdfFileReader(pdf_file)  # 打开并建立一个PDF文件对象

获取标题以及更改文件名

	try:
	        paper_title = pdf_reader.getDocumentInfo().title  # 获取PDF标题
	        pdf_file.close()
	        paper_title = str(paper_title).replace(':', ' ')
	        paper_title = paper_title.replace('/', ' ')
	        paper_title = paper_title.replace('\\', ' ')
	        paper_title = paper_title.replace('*', ' ')
	        paper_title = paper_title.replace('?', ' ')
	        paper_title = paper_title.replace('"', ' ')
	        paper_title = paper_title.replace("'", ' ')
	        paper_title = paper_title.replace('<', ' ')
	        paper_title = paper_title.replace('>', ' ')
	        paper_title = paper_title.replace('|', ' ')
	        new_name = paper_title + '.pdf'
	        os.rename(path + '/' + temp, path + '/' + str(i) + '_' + new_name)
	    except PyPDF2.utils.PdfReadError:
	        pass
	    except AttributeError:
	        pass
	    i = i + 1
  • for循环下读取每个pdf文件。
  • 这里用到了 try except,为了避免因为单个pdf格式引起的error中断整个程序的运行,换句话说,这个python程序先把能改的都改了,不能改的就跳过,之后手动处理。
  • pdf_reader.getDocumentInfo().title 获取论文标题。
  • close把pdf对象关掉,不然后面在打开状态无法改名。
  • 下面的replace为了防止文件命名出现非法符号。
  • 最后利用os.rename改名文件,大功告成!

结果

修改前:
在这里插入图片描述
修改后:
修改后

完整流程

import os
import PyPDF2
from PyPDF2 import PdfFileReader

path = './pdfs'.replace('\\', '/')
paper_name = os.listdir(path)
i = 1

for temp in paper_name:
    print(temp)
    pdf_file = open(path + '/' + temp, 'rb')
    pdf_reader = PdfFileReader(pdf_file)  # 打开并建立一个PDF文件对象
    try:
        paper_title = pdf_reader.getDocumentInfo().title  # 获取PDF标题
        i = int(i)
        pdf_file.close()
        paper_title = str(paper_title).replace(':', ' ')
        paper_title = paper_title.replace('/', ' ')
        paper_title = paper_title.replace('\\', ' ')
        paper_title = paper_title.replace('*', ' ')
        paper_title = paper_title.replace('?', ' ')
        paper_title = paper_title.replace('"', ' ')
        paper_title = paper_title.replace("'", ' ')
        paper_title = paper_title.replace('<', ' ')
        paper_title = paper_title.replace('>', ' ')
        paper_title = paper_title.replace('|', ' ')
        new_name = paper_title + '.pdf'
        os.rename(path + '/' + temp, path + '/' + str(i) + '_' + new_name)
    except PyPDF2.utils.PdfReadError:
        pass
    except AttributeError:
        pass
    i = i + 1
  • 10
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 12
    评论
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

摆烂小冠军

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值