楼主学生,遇到了收集大量论文和pdf文件名乱码需要修改的问题,在网上博客查找资料来解决问题,在本帖中进行经验总结。
- 工作中可能会涉及处理pdf文件,PyPDF2就是这样一个库, 使用它可以轻松的处理pdf文件,它提供了读、写、分割、合并、文件转换等多种操作。
- 官方地址,了解更多。
- 需要注意的是,PyPDF2的使用有局限性,PDF的格式或者编码可能使我们使用中出现PyPDF2.utils.PdfReadError或者AttributeError等等错误,导致我们的论文集无法全部修改;使用的过程中也可能出现读取标题为None的情况。所以不能保证所有论文都能够正确修改,但在我的使用过程中,能把大部分论文都修改了,剩下一小部分手改就好。
pip install pypdf2
import os
import PyPDF2
from PyPDF2 import PdfFileReader
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,之后会添加到文件名中,为了防止更改文件名后出现重复现象。
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