保研之后,有一些闲,就陪着女朋友去她导师(我大哥!虽然他老欺负我)那里提前熟悉环境,哈哈哈!
碰巧女朋友师兄下载了16年和17年的AP的论文,但是都是没有改名字的,全是一堆编号,所以手动改名字的任务就交给了我女朋友和另一个刚保研的小伙伴。
改这玩意儿太费劲了,光论文就5GB多,手动改了几篇之后,想了想应该py大法好解决一点。本人不太会python,只会依葫芦画瓢,轻喷......
思路很简单:
找出文件夹里面的所有pdf文件的路径,然后利用pdfminer这个库,扣出pdf中的大概率是title的三行,拼接,That's all!
不过其中有几个需要注意的:
*提取PDF前4,5,6行拼接,可能会多出后面的作者,也有可能题目少两个单词
*由于其中有些字符不能在命名中使用,如:/<>:?*均使用空格替代
*如果文章title没有居中置顶那就。。。手动调吧
*由于有些论文顶上是有communication的所以需要把它匹配掉
看那里有个communication
但是有些文章题目里本身又有communication。。。
所以我就在前面加了个
]
然后把
]communication
一起匹配扔掉,最后再把其他多余的
]
去掉,有一点脱裤子放屁,但是我只能想到这个办法了,对不起太菜了。。。
大家还是看代码吧。。。
# -*- coding:utf-8 -*-
import os
import re
from urllib.request import urlopen
from pdfminer.pdfinterp import PDFResourceManager,process_pdf
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from io import StringIO
from io import open
def readPDF(pdffile):
rsrcmgr=PDFResourceManager()
retstr=StringIO()
laparams=LAParams()
device=TextConverter(rsrcmgr,retstr,laparams=laparams)
process_pdf(rsrcmgr,device,pdffile)
device.close()
content=retstr.getvalue()
retstr.close()
strs = str(content).split("\n")
title = strs[4]+strs[5]+strs[6]
return title
if __name__ == "__main__":
rootdir = '/Users/nightwish/Desktop/part1' #文件夹路径,不知道的就把文件拖进终端看下
list = os.listdir(rootdir) # 列出文件夹下所有的目录与文件
for i in range(0, len(list)):
path= os.path.join(rootdir, list[i])
if path!=rootdir+'/.DS_Store': #苹果系统需要注意,如果没有会报错
pdffile=open(path,"rb")
title =']'+readPDF(pdffile)
print(title)
rstr = r"[\/\\\:\*\?\"\<\>\|]" #正则匹配去除不可命名字符
title = re.sub(rstr, " ", title)
title =title.replace(']Communications','')
new_title=title.replace(']', '')#去除前面的communication
print(new_title)
os.rename(path, os.path.join(rootdir, new_title+".pdf"))
pdffile.close()
接下来就让它自己超级变变变
最后,再放一张改好的图吧
故曰:人生苦短,我用python
就酱,祝大家玩得开心!
网友评论