python如何用pdfplumber提取pdf表格数据并保存到excel文件中

蜗牛 互联网技术资讯 2022-07-25 149 0

这篇文章主要介绍了python如何用pdfplumber提取pdf表格数据并保存到excel文件中,具有一定借鉴价值,需要的朋友可以参考下。下面就和我一起来看看吧。

目录
  • pdfplumber操作pdf文件

  • 一、pdfplumber安装及导入

  • 二、pdfplumber基础使用

    • 1、基础知识

    • 2、获取pdf基础信息

    • 3、pdfplumber提取表格数据

  • 三、提取pdf表格数据并保存到excel中

    • 总结

      pdfplumber操作pdf文件

      python开源库pdfplumber,可以较为方便地获取pdf的各种信息,包含pdf的基本信息(作者、创建时间、修改时间…)及表格、文本、图片等信息,基本可以满足较为简单的格式转换功能。

      一、pdfplumber安装及导入

      跟其他包一样,支持使用pip安装,安装命令:

      pip install pdfplumber

      python如何用pdfplumber提取pdf表格数据并保存到excel文件中  python 第1张

      安装成功后,可直接用import导入,导入命令:

      import pdfplumber

      二、pdfplumber基础使用

      1、基础知识

      (1)pdfplumber有2个基础类

      PDF和Page,PDF用来处理整个文档,Page用来处理整个页面。

      用法简介
      pdfplumber.PDF .metadata,获取pdf基础信息,返回字典格式,包含作者、创建时间等。 .pages,返回pdfplumber.Page实例的列表,每一个实例包含pdf每一页的信息
      pdfplumber.Page pdfplumber核心功能,对PDF的大部分操作都是基于这个类,包括提取文本、表格等

      (2)pdfplumber读取pdf文件方式

      pdfplumber.open(‘文件路径’),返回pdfplumber.PDF类的实例。

      如果pdf有密码,加入password参数:

      pdfplumber.open(‘文件路径’,password=‘密码’)

      2、获取pdf基础信息

      读取pdf文件,并输出pdf文件的基础信息

      import pdfplumber
      # 打开pdf文件,有密码加入password参数
      pdf_info =pdfplumber.open(r'test.pdf')
      meta_data = pdf_info.metadata  # pdf的基础信息
      page_con = len(pdf_info.pages)  # 获取pdf的总页数
      print('pdf文件的基础信息:\n', meta_data)
      print('pdf共%s页' % page_con)

      python如何用pdfplumber提取pdf表格数据并保存到excel文件中  python 第2张

      3、pdfplumber提取表格数据

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

      用以下pdf文档,作为演示文档。

      python如何用pdfplumber提取pdf表格数据并保存到excel文件中  python 第3张

      (1)extract_tables()方法

      输出文档所有表格,返回一个嵌套列表,其结构层次为table-row-cell。如:

      #extract_tables()用法
      with pdfplumber.open(r'test.pdf') as pdf_info:  # 打开pdf文件
          page_one = pdf_info.pages[0]  # 选择第一页
          page_one_table =page_one.extract_tables()  # 获取pdf文档第一页的所有表格数据
          for row in page_one_table:
             print('第一页的表格数据:', row)

      python如何用pdfplumber提取pdf表格数据并保存到excel文件中  python 第4张
      (2)、extact_table()方法

      不会返回文档的所有表格,仅返回行数最多的表格数据,如存在多个行数相等的表格,则默认输出顶部表格数据。返回的数据结构层次为row-cell,表格的每一行都为一个单独的列表,列表中的元素即为原表格的各个单元格的数据。如:

      # extract_table()用法
      with pdfplumber.open(r'test.pdf') as pdf_info:  # 打开pdf文件
          page_one = pdf_info.pages[0]  # 选择第一页
          page_one_table = page_one.extract_table()
          for row in page_one_table:
              print(row)

      python如何用pdfplumber提取pdf表格数据并保存到excel文件中  python 第5张

      三、提取pdf表格数据并保存到excel中

      完整版,提取pdf表格数据并保存到excel中

      import pdfplumber
      from openpyxl import Workbook
      
      class PDF(object):
          def __init__(self, file_path):
              self.pdf_path = file_path
              # 读取pdf文件
              try:
                  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.metadata
              pdf_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  # 获取第一个sheet
              con = 0
              try:
                  # 获取每一页的表格中的文字,返回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 += 1
                      print('---------------分割线,第%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()

      以上就是python如何用pdfplumber提取pdf表格数据并保存到excel文件中的详细内容了,看完之后是否有所收获呢?如果想了解更多相关内容,欢迎来蜗牛博客行业资讯!

      免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:niceseo99@gmail.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

      评论

      有免费节点资源,我们会通知你!加入纸飞机订阅群

      ×
      天气预报查看日历分享网页手机扫码留言评论Telegram