python利用pdfplumber模块提取pdf表格信息存入excel
步骤1
遍历当前文件夹获取当前pdf文件
# 这是返回文件的绝对路径写法 PATH = lambda p: os.path.abspath( os.path.join(os.path.dirname(__file__), p) ) document_path = PATH(./) list1 = [] for file in os.listdir(document_path): if file.endswith(".pdf"): if file not in list1: list1.append(file)
步骤2
创建Excel对象,方便以后追加sheet进去
import pdfplumber # results_name可以用时间戳创建,mode=a是追加 now_time = time.strftime("%Y%m%d_%H%M%S") df_first = pd.DataFrame() results_name = results_%s.xlsx % now_time df_first.to_excel(results_name) writer = pd.ExcelWriter(results_name, mode=a, engine=openpyxl)
步骤3
获取要处理的表格数据的起始页与结束页,我这里是在第三页的目录利用正则获取
for i in list1: pdf = pdfplumber.open(PATH(i)) for page in pdf.pages: if page.page_number == 3: content = page.extract_text() # 利用正则或其他方法获取pdf表格开始页与结束页 start_page = int(re.findall(3.4.*?(d+), content)[0]) end_page = int(re.findall(3.5.*?(d+), content)[0])
步骤4
获取表格数据,解析数据存入excel
start_page = start_page+4 # +4是因为实际页数比标明页数多4页 end_page = end_page+4 table_range = [m for m in range(start_page,end_page+1)] # 这里的dataframe是根据自己实际情况创建,list2是表头,比如[a,b,c,d,e,f,g] df = pd.DataFrame(columns=list2) # 再次遍历pdf的page for page in pdf.pages: df_len = len(df) if page.page_number in table_range: # 有可能存在多个表格,起始页取最后一个,结束页取第一个 table = page.extract_tables()[-1] # table[1],table[2]...就是要保存的数据 for j in table[1:]: # 有7列数据,这里写死了。可根据实际情况变通 for k in range(0, 7): # 替换第一个值得第一个换行符为空 if (k == 0) and (j[k] is not None): df.loc[df_len, df.columns[k]] = j[k].replace( , , 1) else: df.loc[df_len, df.columns[k]] = j[k] df_len = len(df)
步骤5
关闭pdf对象,保存dataframe到sheet中
pdf.close() writer.save() # 所有操作结束后还要关闭writer对象 writer.close()