前言:
前几天学姐拿来一堆文件名乱码的pdf让帮忙整理一下,按论文标题命名
一看竟然一共250多个文件,还在不同的文件夹中,哇,想想就头疼,这时候就要发挥程序媛的智慧了,正好最近在用python写毕设,就想能不能用python改标题,嗳,原来有专门的处理的库pdfminer。好了闲话少说,开始干活
安装pdfminer库
在命令行输入
pip install pdfminer3k
如果不成功会提示少了什么库,就按照pip install xx(库名称)的方式安装就好,最后再在命令行输入pip install pdfminer3k
把文件从文件夹中取出来:
这个很简单,直接贴代码了
import os
import shutil
import importlib
import sys
def load_file():
walk = os.walk('./12')
i=1;
for root, dirs,files in walk:
for name in files:
shutil.move(os.path.join(root,name), "./myset/"+i+".pdf)
i+=1
load_file()
其中os.walk() 方法用于通过在目录树中游走输出在目录中的文件名,向上或者向下,是一个简单易用的文件、目录遍历器
walk()方法语法格式如下:
os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])
参数
top -- 遍历的目录的地址, 返回的是一个三元组(root,dirs,files)。
- root 所指的是当前正在遍历的这个文件夹的本身的地址
- dirs 是一个 list ,内容是该文件夹中所有的目录的名字(不包括子目录)
- files 同样是 list , 内容是该文件夹中所有的文件(不包括子目录)
topdown--可选,为 True,先遍历 top 目录,否则优先遍历 top 的子目录(默认为开启)。如果 topdown 参数为 True,walk 会遍历top文件夹,与top 文件夹中每一个子目录。
onerror-- 可选, 需要一个 callable 对象,当 walk 需要异常时,会调用。
followlinks -- 可选, 如果为 True,则会遍历目录下的快捷方式(linux 下是 symbolic link)实际所指的目录(默认关闭)。
详情见http://www.runoob.com/python/os-walk.html
从pdf中读标题
1.分析PDF内容
标题在第二行和第三行一般,除极少数的标题只有一行。
2.读pdf获取标题
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[2]+strs[3]
return title
pdffile=open('./mysets/3.pdf',"rb")
title =readPDF(pdffile)
print(title)//
pdffile.close()
3.更改文件名:
def rename():
walk = os.walk('./mysets')
i = 0;
for root, dirs, files in walk:
for name in files:
pdffile=open(os.path.join(root, name),"rb")
title =readPDF(pdffile)
print(title)//
os.rename(os.path.join(root, name), os.path.join(root, title+".pdf”))
i += 1
好了这就将文件名给概率
虽然不能百分百处理好,有些特殊的情况还没有考虑好,但是已经减少了很多工作量拉。
以后要多尝试多做