• Python操作pdfplumber读取PDF写入Excel


    在这里插入图片描述 

    活动地址:CSDN21天学习挑战赛

    学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。

    学习日记

    目录

    学习日记

    一、前言介绍

    二、关于pdfplumber模块

    1、pdfplumber的特点

    2、pdfplumber.PDF类

    3、pdfplumber.Page类

    4、pdfplumber的安装

    三、pdfplumber的使用

     1、加载PDF

    2、pdfplumber.PDF 类

    3、pdfplumber.Page 类

    4、读取PDF

    5、读取PDF文档信息

    6、查看总页数

    7、读取第一页的宽度,页高等信息

    8、读取文本

    9、读取表格

    四、实操

    1、获取pdf基础信息

    2、pdfplumber提取表格数据

    3、完整实例


    一、前言介绍

    PDF是一种编写文档格式,便于跨操作系统传播文档。Python的开源库 pdfplumber,可以较为方便地获取pdf的各种信息,包含pdf的基本信息(作者、创建时间、修改时间…)及表格、文本、图片等信息,基本可以满足较为简单的格式转换功能。

    二、关于pdfplumber模块

    1、pdfplumber的特点

    1、可以轻松访问有关每个PDF对象的详细信息。

    2、可以提取文本和表格的更高级别,可以自定义的方法。

    3、支持紧密集成的可视化调试。

    4、有通过裁剪框过滤对象等实用功能。

     

     

      pdfplumber中有两个基础类,PDF和Page。PDF用来处理整个文档,Page用来处理整个页面。

    2、pdfplumber.PDF类

      .metadata: 获取pdf基础信息,返回字典
      .pages 一个包含pdfplumber.Page实例的列表,每一个实例代表pdf每一页的信息。

    3、pdfplumber.Page类

    pdfplumber核心功能,对PDF的大部分操作都是基于这个类,包括提取文本、表格、尺寸等。

    4、pdfplumber的安装

    win+r-cmd输入

    pip install pdfplumber

    三、pdfplumber的使用

     1、加载PDF

    调用pdfplumber.open(x)加载PDF, 其中x可以有以下几种格式:

    a、PDF文件路径。

    b、文件对象, 以字节流形式加载。

    c、类文件对象, 以字节流形式加载。

    读取 PDF代码:pdfplumber.open("路径/文件名.pdf",password="test",laparams={"line_overlap":0.7})

      解读:

    passworf:加载受密码保护的PDF要传递password关键字参数。

    laparams:将布局分析参数设置为pdfminer.six的布局引擎,传递laparams关键字参数。

    传入 password 参数用于加载已加密的PDF文件。

    例: pdfplumber.open("file.pdf", password = "test").

    传入 laparams 参数可以使用pdfminer.six的布局引擎用于布局分析。例: pdfplumber.open("file.pdf", laparams = { "line_overlap": 0.7 }).

    2、pdfplumber.PDF 类

    pdfplumber.PDF 类代表一个PDF文件,主要有两个属性。

     

    3、pdfplumber.Page 类

    pdfplumber.Pagepdfplumber核心,大部分的操作都是围绕此类进行。

     

    4、读取PDF

    1. import pdfplumber
    2. import pandas as pd
    3. with pdfplumber.open("1.pdf") as pdf:

    5、读取PDF文档信息

    1. with pdfplumber.open("1.pdf") as pdf:
    2. print(pdf.metadata)

    6、查看总页数

    len(pdf.pages)
    

    7、读取第一页的宽度,页高等信息

    1. first_page = pdf.pages[0]
    2. # 查看页码
    3. print('页码:', first_page.page_number)
    4. # 查看页宽
    5. print('页宽:', first_page.width)
    6. # 查看页高
    7. print('页高:', first_page.height)

    8、读取文本

    1. import pdfplumber
    2. import pandas as pd
    3. with pdfplumber.open("exm.pdf") as pdf:
    4. # print(pdf.metadata)
    5. # print(len(pdf.pages))
    6. # 第一页pdfplumber.Page实例
    7. first_page = pdf.pages[0]
    8. text = first_page.extract_text();
    9. print(text)

    9、读取表格

    1. import pdfplumber
    2. import pandas as pd
    3. with pdfplumber.open("exm.pdf") as pdf:
    4. page_third = pdf.pages[2]
    5. table_2 = page_third.extract_table()
    6. # print(table_2)
    7. table_df = pdf.DataFrame(table_2[1:], columns=table_2[0])
    8. print(table_df)
    9. # 保存excel
    10. table_df.to_excel('test.xlsx')

    四、实操

    1、获取pdf基础信息

    1. #读取pdf文件,并输出pdf文件的基础信息
    2. import pdfplumber
    3. # 打开pdf文件,有密码加入password参数
    4. pdf_info =pdfplumber.open(exm.pdf')
    5. meta_data = pdf_info.metadata # pdf的基础信息
    6. page_con = len(pdf_info.pages) # 获取pdf的总页数
    7. print('pdf文件的基础信息:\n', meta_data)
    8. print('pdf共%s页' % page_con)

    2、pdfplumber提取表格数据

      提取表格数据主要用到extract_tables()和extract_table()两种方法,这两种提取方式各有不同。

    extract_tables()方法——输出文档所有表格,返回一个嵌套列表。

    1. #extract_tables()法
    2. with pdfplumber.open(r'exm.pdf') as pdf_info: # 打开pdf
    3. page_one = pdf_info.pages[0]
    4. page_one_table =page_one.extract_tables() # 获取pdf第一页的所有表格数据
    5. for row in page_one_table:
    6. print('第一页的表格数据:', row)

    extact_table()方法——不会返回文档的所有表格,仅返回行数最多的表格数据。如存在多个行数相等的表格,则默认输出顶部表格数据。表格的每一行都为一个单独的列表,列表中的元素即为原表格的各个单元格的数据。

    1. # extract_table()法
    2. with pdfplumber.open(r'exm.pdf') as pdf_info: # 打开pdf
    3. page_one = pdf_info.pages[0]
    4. page_one_table = page_one.extract_table()
    5. for row in page_one_table:
    6. print(row)

    3、完整实例

    1. #提取pdf表格数据并保存到excel中
    2. import pdfplumber
    3. from openpyxl import Workbook
    4. class PDF(object):
    5. def __init__(self, file_path):
    6. self.pdf_path = file_path
    7. # 读取pdf
    8. try:
    9. self.pdf_info = pdfplumber.open(self.pdf_path)
    10. print('读取文件完成!')
    11. except Exception as e:
    12. print('读取文件失败:', e)
    13. # 打印pdf的基本信息、返回字典,作者、创建时间、修改时间/总页数
    14. def get_pdf(self):
    15. pdf_info = self.pdf_info.metadata
    16. pdf_page = len(self.pdf_info.pages)
    17. print('pdf共%s页' % pdf_page)
    18. print("pdf文件基本信息:\n", pdf_info)
    19. self.close_pdf()
    20. # 提取表格数据,并保存到excel中
    21. def get_table(self):
    22. wb = Workbook() # 实例化一个工作簿对象
    23. ws = wb.active # 获取第一个sheet
    24. con = 0
    25. try:
    26. # 获取每一页的表格中的文字,返回table、row、cell格式:[[[row1],[row2]]]
    27. for page in self.pdf_info.pages:
    28. for table in page.extract_tables():
    29. for row in table:
    30. # 对每个单元格的字符进行简单清洗处理
    31. row_list = [cell.replace('\n', ' ') if cell else '' for cell in row]
    32. ws.append(row_list) # 写入数据
    33. con += 1
    34. print('---------------分割线,第%s页---------------' % con)
    35. except Exception as e:
    36. print('报错:', e)
    37. finally:
    38. wb.save('\\'.join(self.pdf_path.split('\\')[:-1]) + '\pdf_excel.xlsx')
    39. print('写入完成!')
    40. self.close_pdf()
    41. # 关闭文件
    42. def close_pdf(self):
    43. self.pdf_info.close()
    44. if __name__ == "__main__":
    45. file_path = input('请输入pdf文件路径:')
    46. pdf_info = PDF(file_path)
    47. # pdf_info.get_pdf() # 打印pdf基础信息
    48. # 提取pdf表格数据并保存到excel中,文件保存到跟pdf同一文件路径下
    49. pdf_info.get_table()

  • 相关阅读:
    LeetCode(力扣)39. 组合总和Python
    [最新]访问/加速StackOverFlow的方法
    vue下载Excel文件
    【第006篇】通过impdp命令导入dmp文件到Oracle11g数据库中
    ts泛型,映射,条件类型和类型提取infer和一些常用工具库的说明
    MySQL常见锁探究
    mongoDB安装教程
    二、JavaScript库[Math、Date]
    mmsegmentation V0.27.0环境搭建(一)
    vue常用指令
  • 原文地址:https://blog.csdn.net/m0_63794226/article/details/126290613