这篇文章给大家介绍利用Python怎么将pdf表格导入到excel,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
pdf文件的表格的数据可以复制,但是这是一项非常繁琐的事情,所以我首先考虑的是,Python可否帮助我们高效且规范地读pdf中取的表格数据,所以一顿的检索,发现了一个比较优质处理pdf的库:pdfplumber,当然这个库需要大家pip安装pdfplumber去进行安装。
- <李>
导入pdfplumber库
李> <李>通过pdfplumber.open()函数获取mt2018。pdf文件对象
李> <李>通过该对象。页面获取pdf每页的对象,截取我们需要的页对象即可
李> <李>通过页对象.extract_tables()获取表格数据(若需要获取文本:页对象.extract_text ())
代码实现:
import pdfplumber #,获取,pdf 文件对象 时间=pdf_mt pdfplumber.open (“mt2018.pdf") #,因为我需要获取的资产负债表在,页51号~ 53号,但是索引从0开始,所以切片取,百分比较即可 for pdf_pg 拷贝pdf_mt.pages [50:53]: ,, #才能,只提取当前页表格数据, 打印才能(pdf_pg.extract_tables ()) ,, ,, -------------------------------------------------------------------------- 结果比较多,截取一部分: [[[& # 39;项目& # 39;,,& # 39;附注& # 39;,,& # 39;期末余额& # 39;,,& # 39;期初余额& # 39;],,(& # 39;流动资产:& # 39;,,& # 39;& # 39;,,& # 39;& # 39;,,& # 39;& # 39;],,(& # 39;货币资金& # 39;,,& # 39;1 & # 39;,,& # 39;112074791420 .06点# 39;,,& # 39;87868869913 .34 # 39;],,(& # 39;结算备付金& # 39;,,& # 39;& # 39;,,& # 39;& # 39;,,& # 39;& # 39;],,(& # 39;拆出资金& # 39;,,& # 39;& # 39;,,& # 39;& # 39;,,& # 39;& # 39;],,(& # 39;以公允价值计量且其变动计入当\ n期损益的金融资产& # 39;,,& # 39;& # 39;,,& # 39;& # 39;,,& # 39;& # 39;],,(& # 39;衍生金融资产& # 39;,,& # 39;& # 39;,,& # 39;& # 39;,,& # 39;& # 39;],,(& # 39;应收票据及应收账款& # 39;,,& # 39;2 & # 39;,,& # 39;563739710点〇# 39;,,& # 39;1221706039点〇# 39;]]]
将完整表保存到csv文件中
我们发现,返回的数据集是一个三维的列表。那么在我们平时处理的excel表格数据(行与列)都是二维的数据,那么,这多出的一维是什么呢?其实就是我们的夜(页)~再来一个循环取出二维数据进行保存即可
for pdf_pg 拷贝pdf_mt.pages [50:53]: for 才能;pdf_tb 拷贝pdf_pg.extract_tables (): ,,,印刷(pdf_tb) ,,,, ------------------------------------------------------------------------------ 结果比较多,截取一部分: [[& # 39;项目& # 39;,,& # 39;附注& # 39;,,& # 39;期末余额& # 39;,,& # 39;期初余额& # 39;],,(& # 39;流动资产:& # 39;,,& # 39;& # 39;,,& # 39;& # 39;,,& # 39;& # 39;],,(& # 39;货币资金& # 39;,,& # 39;1 & # 39;,,& # 39;112074791420 .06点# 39;,,& # 39;87868869913 .34 # 39;],,(& # 39;结算备付金& # 39;,,& # 39;& # 39;,,& # 39;& # 39;,,& # 39;& # 39;],,(& # 39;拆出资金& # 39;,,& # 39;& # 39;,,& # 39;& # 39;,,& # 39;& # 39;],,(& # 39;以公允价值计量且其变动计入当\ n期损益的金融资产& # 39;,,& # 39;& # 39;,,& # 39;& # 39;,,& # 39;& # 39;],,(& # 39;衍生金融资产& # 39;,,& # 39;& # 39;,,& # 39;& # 39;,,& # 39;& # 39;],,(& # 39;应收票据及应收账款& # 39;,,& # 39;2 & # 39;,,& # 39;563739710点〇# 39;,,& # 39;1221706039点〇# 39;]]
但是,真的那么简单吗?这时,我们就需要细品我们的pdf了,如下图
import pdfplumber import pandas  as pd import numpy  as np #,创建仅有表头的,dataframe 数组 pdf_df =, pd.DataFrame(列=[& # 39;项目& # 39;,,& # 39;附注& # 39;,,& # 39;期末余额& # 39;,,& # 39;期初余额& # 39;]) #,获取,pdf 文件对象 时间=pdf_mt pdfplumber.open (“mt2018.pdf") #,因为我需要获取的资产负债表在,页51号~ 53号,但是索引从0开始,所以切片取,百分比较即可 for pdf_pg 拷贝pdf_mt.pages [50:53]: ,, #,才能获取二维列表 for 才能;pdf_tb 拷贝pdf_pg.extract_tables (): ,,,, ,,,#,将其拼接 ,,,pdf_df =, pdf_df.append (pd.DataFrame (np.array (pdf_tb),列=[& # 39;项目& # 39;,,& # 39;附注& # 39;,,& # 39;期末余额& # 39;,,& # 39;期初余额& # 39;))) #,显示后五条 pdf_df.tail ()