设计网站哪个好用,招标网站排行榜,便民工具 网站开发,网站数据库大小文章目录 前言一、pdfplumber模块1.1 pdfplumber的特点1.2 pdfplumber.PDF类1.3pdfplumber.Page类 二 pdfplumber的使用2.1 加载PDF2.2 pdfplumber.PDF 类2.3 pdfplumber.Page 类2.4 读取PDF2.5 读取PDF文档信息2.6 查看总页数2.7 查看总页数读取第一页的宽度#xff0c;页高等… 文章目录 前言一、pdfplumber模块1.1 pdfplumber的特点1.2 pdfplumber.PDF类1.3pdfplumber.Page类 二 pdfplumber的使用2.1 加载PDF2.2 pdfplumber.PDF 类2.3 pdfplumber.Page 类2.4 读取PDF2.5 读取PDF文档信息2.6 查看总页数2.7 查看总页数读取第一页的宽度页高等信息2.8 读取文本2.9 读取表格3.1 pdfplumber提取表格数据示例读取文字读取表格 前言
PDF是一种编写文档格式便于跨操作系统传播文档。Python的开源库 pdfplumber可以较为方便地获取pdf的各种信息包含pdf的基本信息作者、创建时间、修改时间…及表格、文本、图片等信息基本可以满足较为简单的格式转换功能。
一、pdfplumber模块
1.1 pdfplumber的特点
1、可以轻松访问有关每个PDF对象的详细信息。2、可以提取文本和表格的更高级别可以自定义的方法。3、支持紧密集成的可视化调试。4、有通过裁剪框过滤对象等实用功能。 pdfplumber中有两个基础类PDF和Page。PDF用来处理整个文档Page用来处理整个页面。
1.2 pdfplumber.PDF类
.metadata: 获取pdf基础信息返回字典pages 一个包含pdfplumber.Page实例的列表每一个实例代表pdf每一页的信息。
1.3pdfplumber.Page类
pdfplumber核心功能对PDF的大部分操作都是基于这个类包括提取文本、表格、尺寸等。
二 pdfplumber的使用
2.1 加载PDF
调用pdfplumber.open(x)加载PDF, 其中x可以有以下几种格式:a、PDF文件路径。b、文件对象, 以字节流形式加载。c、类文件对象, 以字节流形式加载。读取 PDF代码pdfplumber.open(路径/文件名.pdf,passwordtest,laparams{line_overlap:0.7}) 解读 passworf:加载受密码保护的PDF要传递password关键字参数。 laparams将布局分析参数设置为pdfminer.six的布局引擎传递laparams关键字参数。
2.2 pdfplumber.PDF 类
pdfplumber.PDF 类代表一个PDF文件,主要有两个属性。
属性说明.metadata元数据键值对字典,摘自PDF的“信息”。通常包括“CreationDate(创建日期)、“ModDate(修改日期)、Producer(创建者)等。.pages包含pdfplumber . Page(页实例)的列表。
2.3 pdfplumber.Page 类
pdfplumber.Page是pdfplumber核心大部分的操作都是围绕此类进行。
属性说.page_number页码.width页面宽.height页面长.objects/ .chars /.lines /. rects /. curves / . images属性中的每一个都是一个列表每个列表都是嵌入在页面上的每个此类对象包含一个字典。
2.4 读取PDF
import pdfplumber
import pandas as pdwith pdfplumber.open(ag-energy-round-up-2017-02-24.pdf) as pdf:2.5 读取PDF文档信息
with pdfplumber.open(ag-energy-round-up-2017-02-24.pdf) as pdf:print(pdf.metadata)
结果 {‘Title’: ‘National Ag Energy’, ‘Author’: ‘LGMN, Des Moines, IA’, ‘Keywords’: ‘National Ag Energy ethanol biodiesel bioenergy’, ‘CreationDate’: “D:20170224133144-06’00’”, ‘ModDate’: “D:20170224133144-06’00’”, ‘Producer’: ‘Microsoft® Excel® 2013’, ‘Creator’: ‘Microsoft® Excel® 2013’} 2.6 查看总页数
len(pdf.pages)2.7 查看总页数读取第一页的宽度页高等信息
first_page pdf.pages[0]
# 查看页码
print(页码, first_page.page_number)# 查看页宽print(页宽, first_page.width)
# 查看页高
print(页高, first_page.height)2.8 读取文本
with pdfplumber.open(继吊岩坪110-2018-05都吊东线2区.pdf) as pdf:# 第一页pdfplumber.Page实例first_page pdf.pages[0]text first_page.extract_text()print(text)2.9 读取表格
import pdfplumber
import pandas as pdwith pdfplumber.open(继吊岩坪110-2018-05都吊东线2区.pdf) as pdf:page_third pdf.pages[0]table_1 page_third.extract_table()#table_df pd.DataFrame(table_1[1:], columnstable_1[0])print(table_1)##三 、示例
3.1 pdfplumber提取表格数据
提取表格数据主要用到extract_tables()和extract_table()两种方法这两种提取方式各有不同。 extract_tables()方法——输出文档所有表格返回一个嵌套列表。
with pdfplumber.open(r继吊岩坪110-2018-05都吊东线2区.pdf) as pdf_info: # 打开pdfpage_one pdf_info.pages[0]page_one_table page_one.extract_tables() # 获取pdf第一页的所有表格数据for row in page_one_table:print(第一页的表格数据, row)
extact_table()方法——不会返回文档的所有表格仅返回行数最多的表格数据。如存在多个行数相等的表格则默认输出顶部表格数据。表格的每一行都为一个单独的列表列表中的元素即为原表格的各个单元格的数据。
示例
# 提取pdf表格数据并保存到excel中
import pdfplumber
from openpyxl import Workbookclass PDF(object):def __init__(self, file_path):self.pdf_path file_path# 读取pdftry:self.pdf_info pdfplumber.open(self.pdf_path)print(读取文件完成)except Exception as e:print(读取文件失败, e)# 打印pdf的基本信息、返回字典作者、创建时间、修改时间/总页数def get_pdf(self):pdf_info self.pdf_info.metadatapdf_page len(self.pdf_info.pages)print(pdf共%s页 % pdf_page)print(pdf文件基本信息\n, pdf_info)self.close_pdf()# 提取表格数据,并保存到excel中def get_table(self):wb Workbook() # 实例化一个工作簿对象ws wb.active # 获取第一个sheetcon 0try:# 获取每一页的表格中的文字返回table、row、cell格式[[[row1],[row2]]]for page in self.pdf_info.pages:for table in page.extract_tables():for row in table:# 对每个单元格的字符进行简单清洗处理row_list [cell.replace(\n, ) if cell else for cell in row]ws.append(row_list) # 写入数据con 1print(---------------分割线,第%s页--------------- % con)except Exception as e:print(报错, e)finally:wb.save(\\.join(self.pdf_path.split(\\)[:-1]) \pdf_excel.xlsx)print(写入完成)self.close_pdf()# 关闭文件def close_pdf(self):self.pdf_info.close()if __name__ __main__:file_path input(请输入pdf文件路径)pdf_info PDF(file_path)pdf_info.get_pdf() # 打印pdf基础信息# 提取pdf表格数据并保存到excel中,文件保存到跟pdf同一文件路径下pdf_info.get_table()import pdfplumber
text_path rD:\Project\MyData\Study\GUI\6_GUI编程第三部分\第十一章GUI图形用户界面编程.pdfwith pdfplumber.open(text_path) as pdf:print(pdf.pages)#获取pdf文档所有的页类型是dicttotal_pages len(pdf.pages)print(total_pages: ,total_pages)page pdf.pages[0] #获取第一页print(type(page)) #class pdfplumber.page.Page# print(page.extract_text()) #获取第一页的内容#fitz读取pdf全文contentfor i in range(0,len(pdf.pages)):# pagecontent pdf.pages[i].extract_text()# print(page.extract_text())# print(page.extract_tables())# print(content)读取文字
import pdfplumber
import pandas as pdwith pdfplumber.open(E:\\600aaa_2.pdf) as pdf:page_count len(pdf.pages)print(page_count) # 得到页数for page in pdf.pages:print(---------- 第[%d]页 ---------- % page.page_number)# 获取当前页面的全部文本信息包括表格中的文字print(page.extract_text())
读取表格
import pdfplumber
import pandas as pd
import rewith pdfplumber.open(E:\\600aaa_1.pdf) as pdf:page_count len(pdf.pages)print(page_count) # 得到页数for page in pdf.pages:print(---------- 第[%d]页 ---------- % page.page_number)for pdf_table in page.extract_tables(table_settings{vertical_strategy: text,horizontal_strategy: lines,intersection_tolerance:20}): # 边缘相交合并单元格大小# print(pdf_table)for row in pdf_table:# 去掉回车换行print([re.sub(\s, , cell) if cell is not None else None for cell in row])