目录
一,pdfpulmber模块
1.安装
2.加载PDF
3.pdfplumber.PDF类
1.读取PDF文档信息(.metadata)
2.输出总页数
4.pdfplumber.Page类
1.读取第一页的宽,高等信息
2.读取文本第二页
3.读取表格第一页
三,实战操作
1.提取单个pdf全部页数
2.批量提取多个PDF文件
一,pdfpulmber模块
功能——
·访问有关每个PDF对象的详细信息
·用于提取文本和表格的更高级别,可自定义的方法
·紧密集成的可视化调试
·其它实用功能
1.安装
pip install pdfplumber
导入
import pdfplumber
pdf表格测试集pdf文件(Python读取PDF表格测试集).zip
2.加载PDF
格式:
pdfplumber.open("路径/文件名.pdf",password="",laparams={"line_overlap":=0.7})
·password:加载受保护密码保护的PDF,传递password关键字参数
·laparams:要将布局分析参数设置为pdfminer.six的布局引擎,需传递laparams关键字参数
例——
import pdfplumber
with pdfplumber.open("./pdf-files/1.pdf") as pdf:
print(pdf)
print(type(pdf))
输出——
3.pdfplumber.PDF类
该类表示单个PDF,具有两个主要属性——
1.读取PDF文档信息(.metadata)
import pdfplumber
with pdfplumber.open("./pdf-files/1.pdf") as pdf:
print(pdf.metadata)
输出——
{'Author': 'wangwangyuqing', 'Comments': '', 'Company': '', 'CreationDate': "D:20220330113508+03'35'", 'Creator': 'WPS 文字', 'Keywords': '', 'ModDate': "D:20220330113508+03'35'", 'Producer': '', 'SourceModified': "D:20220330113508+03'35'", 'Subject': '', 'Title': '', 'Trapped': 'False'}
2.输出总页数
import pdfplumber
with pdfplumber.open("./pdf-files/1.pdf") as pdf:
print(len(pdf.pages))
输出——
4.pdfplumber.Page类
pdfplumber.Page类是pdfplumber整个的核心——
1.读取第一页的宽,高等信息
import pdfplumber
with pdfplumber.open("./pdf-files/1.pdf") as pdf:
first_page = pdf.pages[0] # pdfplumber.Page对象的第一页
# 查看页码
print('页码:', first_page.page_number)
# 查看页宽
print('页宽:', first_page.width)
# 查看页高
print('页高:', first_page.height)
输出——
页码: 1
页宽: 595.3
页高: 841.9
2.读取文本第二页
import pdfplumber
with pdfplumber.open("./pdf-files/1.pdf") as pdf:
first_page = pdf.pages[1] # pdfplumber.Page对象的第一页
text = first_page.extract_text()
print(text)
输出——
盛隆食品专营店 165 30000 浙江
保银旗舰店 228 1444 河南
塞上滩旗舰店 868 903 宁夏
陆卢缘旗舰店 88 8000 福建
小仙炖旗舰店 2796 2771 河北
良品铺子旗舰店 98 600000 湖北
一哥鲍鱼食品专
1999 286 广东
营店
舍得官方旗舰店 1188 3975 四川
珍百年旗舰店 128 1931 湖南
丽皇香旗舰店 128 7000 福建
轩农谷生鲜专营
488 1921 浙江
店
3.读取表格第一页
import pdfplumber
import xlwt
with pdfplumber.open("./pdf-files/1.pdf") as pdf:
page_one = pdf.pages[0] # PDF第一页
table_1 = page_one.extract_table() # 读取表格数据
# 1. 创建Excel表对象
workbook = xlwt.Workbook(encoding='utf8')
# 2. 新建sheet表
worksheet = workbook.add_sheet('Sheet1')
# 3. 自定义列名
col1 = table_1[0]
# print(col1)# ['店铺名', '价格', '销量', '地址']
# 4. 将列属性元组col写进sheet表单中第一行
for i in range(0, len(col1)):
worksheet.write(0, i, col1[i])
# 5. 将数据写进sheet表单中
for i in range(0, len(table_1[1:])):
data = table_1[1:][i]
for j in range(0, len(col1)):
worksheet.write(i + 1, j, data[j])
# 6. 保存文件分两种格式
输出——
三,实战操作
1.提取单个pdf全部页数
import pdfplumber
import xlwt
with pdfplumber.open("./pdf-files/1.pdf") as pdf:
# 1. 把所有页的数据存在一个临时列表中
item = []
for page in pdf.pages:
text = page.extract_table()
for i in text:
item.append(i)
# 2. 创建Excel表对象
workbook = xlwt.Workbook(encoding='utf8')
# 3. 新建sheet表
worksheet = workbook.add_sheet('Sheet1')
# 4. 自定义列名
col1 = item[0]
# print(col1)# ['店铺名', '价格', '销量', '地址']
# 5. 将列属性元组col写进sheet表单中第一行
for i in range(0, len(col1)):
worksheet.write(0, i, col1[i])
# 6. 将数据写进sheet表单中
for i in range(0, len(item[1:])):
data = item[1:][i]
for j in range(0, len(col1)):
worksheet.write(i + 1, j, data[j])
# 7. 保存文件分两种格式
workbook.save('test.xls')
2.批量提取多个PDF文件
import pdfplumber
import xlwt
import os
# 一、获取文件下所有pdf文件路径
file_dir = r'pdf-files'
file_list = []
for files in os.walk(file_dir):
# print(files)
# ('E:\\Python学习\\pdf文件', [],
# ['1.pdf', '1的副本.pdf', '1的副本10.pdf', '1的副本11.pdf', '1的副本2.pdf', '1的副本3.pdf', '1的副本4.pdf', '1的副本5.pdf', '1的副本6.pdf',
# '1的副本7.pdf', '1的副本8.pdf', '1的副本9.pdf'])
for file in files[2]:
# 以. 进行分割如果后缀为PDF或pdf就拼接地址存入file_list
if file.split(".")[1] == 'pdf' or file.split(".")[1] == 'PDF':
file_list.append(file_dir + '\\' + file)
# 二、存入Excel
# 1. 把所有PDF文件的所有页的数据存在一个临时列表中
item = []
for file_path in file_list:
with pdfplumber.open(file_path) as pdf:
for page in pdf.pages:
text = page.extract_table()
for i in text:
item.append(i)
# 2. 创建Excel表对象
workbook = xlwt.Workbook(encoding='utf8')
# 3. 新建sheet表
worksheet = workbook.add_sheet('Sheet1')
# 4. 自定义列名
col1 = item[0]
# print(col1)# ['店铺名', '价格', '销量', '地址']
# 5. 将列属性元组col写进sheet表单中第一行
for i in range(0, len(col1)):
worksheet.write(0, i, col1[i])
# 6. 将数据写进sheet表单中
for i in range(0, len(item[1:])):
data = item[1:][i]
for j in range(0, len(col1)):
worksheet.write(i + 1, j, data[j])
# 7. 保存文件分两种格式
workbook.save('test.xls')