通过看别人写的博客,发现python里面有关PDF解析的通常有以下四种:
import tabula
# Read pdf into DataFrame
df = tabula.read_pdf("./P26.pdf",pages=str(1))
print(df)
这个直接返回的是一个数据帧,所以就直接是结构化的数据啦!
输出结果是这样的:
[ 序号 疑似失联私募机构
0 1 中投国美投资基金管理(北京)有限公司
1 2 北京嘉宸投资基金有限公司
2 3 中融国晟投资基金管理(北京)有限公司
3 4 奥尼斯特(北京)投资基金管理有限公司
4 5 北京国信联盟投资基金管理有限公司]
import pdfplumber
import pandas as pd
pdf = pdfplumber.open("./P26.pdf")
p0 = pdf.pages[0]#注意此处的pages是一个列表,索引是从0开始的
table = p0.extract_table()
df = pd.DataFrame(table[1:], columns=table[0])
# df = pd.DataFrame(table[2:], columns=table[1])
print(df)
输出结果是这样的:
序号 NaN NaN 疑似失联私募机构 NaN NaN
0 1 中投国美投资基金管理(北京)有限公司
1 2 北京嘉宸投资基金有限公司 None None
2 3 中融国晟投资基金管理(北京)有限公司 None None
3 4 奥尼斯特(北京)投资基金管理有限公司 None None
4 5 北京国信联盟投资基金管理有限公司 None None
虽然为了展示对比的方便,这里都是用了同样的一个表格,但是方案2的解决真的要比1好
别问我为啥知道2比1好,你试试用1去解析一些带有文字格式的表格,带有复杂的表头的表格,你就知道啦!我在这里并没有在瞎说,而且还得装的的java的,后者只装一个的ImageMagick的就行,而且ImageMagick的很有用的
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(6,4), columns=list('ABCD'))
print(df.iloc[3]) # 输出第4行的值 索引以0开头
print(df.iloc[3:5, 0:2]) # 输出4-5行,1到2列
print(df.iloc[[1, 2, 4], [0, 2]]) # 输出不连续行列的树
print(df.iat[1, 1]) # 提取2行2列的数,提取单个数iat效率更高
print('分割线','*'*200)