需求:供应链的小伙伴找到我,说是每周处理pdf订单文件太费事,需要把里面的内容逐个拷贝处理出来,然后粘贴到excel归档,这样的操作挺费事的,每次都要花个半个小时以上的时候,而且还有一个问题,人工操作,指不定哪个格子粘贴不对,导致数据出错。细细想来,确认是这么个情况,客户把pdf文件发送过来,确实需要这样做,当然,就需要花不少的时间了。
分析:当然,从Python的思维出发,直接读取pdf不就完事了?果然,Python有第三方的Library支持,选来选取,最后选择了pdfplumber, 基本上可以满足这个需求。注意:图片pdf是无法读取的,那个要涉及到图像识别了,这里的pdf一般指通过其他应用转成的pdf.
处理过程:
整个过程中,处理的核心为通过pdfplumber, 关于这个库,其中用到了pdfplumber.extract_text()进行整个单页面提取,当然,也可以通过table来提取数据,后面剩下的就是数据处理了,当然可以结合微信,钉钉,邮件之类的方式,把结果推送出去。
核心代码如下:
def get_from_pdf(file_name):
part=''
ProgramNum=''
record=[]
per_record=[]
with pdfplumber.open(file_name) as pdf:
page=pdf.pages[0]
info=page.extract_text()
with open('temp.txt','w',encoding='utf-8') as fw:
fw.write(info)
with open('temp.txt','r',encoding='utf-8') as fr:
lines=fr.readlines()
for line in lines:
line=(line.strip('\n')).strip()
if "Part:" in line:
part=get_part(line)
if "Program Number/Start Date:" in line:
ProgramNum=get_program_number(line)
if "/202" in line:
per_line=line.split(" ")
if "/202" in per_line[0]:
per_record.append(dt_sql(per_line[0]))
per_record.append(per_line[2])
record.append(per_record)
per_record=[]
print(part)
print(ProgramNum)
for line in record:
print(line)
return part,ProgramNum,record
在这个里面,提取的内容是做了中转,先转到本地临时txt中,然后从txt中提取数据并转存为list格式,进行更深入的数据筛选。
小结:
通过python对pdf数据的提取,目前有几个优点:
1. 这个方法可以减少人为操作失误,提供人员工作效率
2. 可以把这个方法应用任何使用pdf数据提取的地方,当然做大量pdf数据提取也是可以的。
更多的应用场景等待挖掘。。。