python3 获取某个文件夹所有的pdf文件表格提取表格并一起合并到excel文件

下面是一个完整的示例,其中包括了merge_tables_to_excel函数的定义,并且假设该函数的功能是从每个PDF文件中提取第一个表格并将其合并到一个Excel文件中:

import os  
from pathlib import Path  
import pandas as pd  
import pdfplumber  def extract_first_table_from_pdf(pdf_path):  try:  with pdfplumber.open(pdf_path) as pdf:  for page in pdf.pages:  tables = page.extract_tables()  if tables:  # tables[0]   pdf中的第一个表格,如果pdf有第二个表格你可以修改为tables[1] 根据你需求来调整return tables[0]   except Exception as e:  print(f"Error reading {pdf_path}: {e}")  return None  def merge_tables_to_excel(pdf_files, excel_path):  all_tables = []  for pdf_path in pdf_files:  first_table = extract_first_table_from_pdf(pdf_path)  if first_table:  df_table = pd.DataFrame(first_table[1:], columns=first_table[0])  all_tables.append(df_table)  if all_tables:  merged_tables_df = pd.concat(all_tables, ignore_index=True)  merged_tables_df.to_excel(excel_path, sheet_name='Merged Tables', index=False)  print(f"Tables have been saved to {excel_path}")  else:  print("No tables found in the PDF files.")  def find_all_pdf_files(directory):  return list(Path(directory).glob("*.pdf"))  if __name__ == "__main__":  # 指定PDF文件夹路径  pdf_folder = Path("refer")  # 获取文件夹中所有的PDF文件  pdf_files = find_all_pdf_files(pdf_folder)  # 打印找到的PDF文件列表  print("Found PDF files:", [str(file) for file in pdf_files])  # 指定要保存的Excel文件路径  excel_path = "merged_tables.xlsx"  # 提取并合并表格数据到Excel文件  merge_tables_to_excel(pdf_files, excel_path)

运行结果如图所示:
在这里插入图片描述
在这里插入图片描述

如果你想要遍历一个文件夹中的所有子文件夹,并获取每个子文件夹中的PDF文件,你可以使用递归函数来实现这个功能。下面是一个修改后的代码示例,它会递归地搜索指定目录及其所有子目录中的PDF文件:

import os  
from pathlib import Path  def find_all_pdf_files(directory):  pdf_files = []  for root, dirs, files in os.walk(directory):  for file in files:  if file.lower().endswith('.pdf'):  pdf_files.append(Path(root) / file)  return pdf_files  if __name__ == "__main__":  # 指定PDF文件夹路径  pdf_folder = Path("refer")  # 获取文件夹中所有的PDF文件,包括子文件夹中的PDF文件  pdf_files = find_all_pdf_files(pdf_folder)  # 打印找到的PDF文件列表  print("Found PDF files:", [str(file) for file in pdf_files])  # 指定要保存的Excel文件路径  excel_path = "merged_tables.xlsx"  # 提取并合并表格数据到Excel文件  merge_tables_to_excel(pdf_files, excel_path)

在这个示例中,find_all_pdf_files 函数使用 os.walk() 来递归遍历目录和子目录。os.walk() 会为每个目录返回一个三元组,包含当前目录的路径、当前目录下的子目录名列表,以及当前目录下的文件名列表。函数遍历每个文件名,检查它是否以 .pdf 结尾(不区分大小写),如果是,则将其添加到 pdf_files 列表中。

请确保你的 merge_tables_to_excel 函数能够处理多个PDF文件中的表格合并到Excel文件的逻辑。如果你需要更具体的帮助来定义这个函数,请提供更多关于你希望如何合并表格的信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/462342.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数字图像处理(实践篇)四十三 OpenCV-Python 使用SURF算法检测图像上的特征点的实践

目录 一 SURF算法概述 1 积分图 2 SURF算法 3 SIFT与SURF 二 涉及的函数 三 实践 一 SURF算法概述

113.路径总和 II

给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 叶子节点 是指没有子节点的节点。 示例 1: 输入:root [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum 22 输出&a…

【Spring框架】Spring事务同步

目录 一、什么是Spring事务同步 二、 事务同步管理器 2.1 TransactionSynchronizationManager事务同步管理器 2.1.1 资源同步 2.1.2 事务同步 2.1.3 总结 三、事务同步管理器保障事务的原理 四、spring事务为何使用TransactionSynchronizationManager spring源码实现 …

金融信贷风控评分卡模型

评分卡模型概念 评分模型是根据借款人的历史数据,选取不同维度的数据类型,通过计算而得出的对借款人信用情况打分的模型。不同等级的信用分数代表了借款人信用情况的好坏,以此来分析借款人按时还款的可能性。 评分卡模型分类 A卡&#xff…

【Linux】线程池线程安全的单例模式和STL读者写者问题

需要云服务器等云产品来学习Linux的同学可以移步/–>腾讯云<–/官网&#xff0c;轻量型云服务器低至112元/年&#xff0c;优惠多多。&#xff08;联系我有折扣哦&#xff09; 文章目录 1. 线程池1.1 线程池是什么1.2 为什么要有线程池1.3 线程池的应用场景1.4 线程池的任…

MySQL篇之回表查询

一、聚集索引 将数据存储与索引放到了一块&#xff0c;索引结构的叶子节点保存了行数据。特点&#xff1a;必须有,而且只有一个。 聚集索引选取规则: 1. 如果存在主键&#xff0c;主键索引就是聚集索引。 2. 如果不存在主键&#xff0c;将使用第一个唯一&#xff08;UNIQUE&am…

公众号取关粉丝获取方法1

一、前言 你是不是还在苦恼&#xff0c;每日关注那么多新人&#xff0c;为何同样也会有那么多人取关&#xff0c;到底是哪里出了问题&#xff0c;这样一个困扰公众号主的一个世纪难题&#xff0c;今日小编就要和大家揭晓&#xff0c;当然&#xff0c;这篇文章可能对于不是公众…

TP-LINK今年的年终奖。。

TP-LINK 年终奖 如果说昨天爆料的「浦发银行年终奖&#xff0c;一书抵万金」还稍有争议&#xff08;有些说没发&#xff0c;有些说 3/4/5 折&#xff09;&#xff0c;那今天的 TP-LINK 则是毫无悬念。 据在职的 TP-LINK 技术员工爆料&#xff1a;入职时说好的 16 薪&#xff0c…

vue3 的setup和生命周期

vue3 的setup和生命周期 许多文章认为setup执行时间在beforeCreate 和created 之间&#xff0c;但是通过实际测试发现setup调用在beforecreate之前。 export default {beforeCreate() {console.log(beforeCreate running....);},created() {console.log("created runnin…

Oracle 几种行转列的方式 sum+decode sum+case when pivot

目录 原始数据&#xff1a; 方式一&#xff1a; 方式二&#xff1a; 方式三&#xff1a; unpivot的使用&#xff1a; 原始数据&#xff1a; 方式一&#xff1a; select t_name,sum(decode(t_item, item1, t_num, 0)) item1,sum(decode(t_item, item2, t_num, 0)) item2,s…

二、Mybatis相关概念

1.对象/关系数据库映射&#xff08;ORM) ORM全称Object/Relation Mapping&#xff1a;表示对象-关系映射的缩写ORM完成面向对象的编程语言到关系数据库的映射。当ORM框架完成映射后&#xff0c;程序员既可以利用面向对象程序设计语言的简单易用性&#xff0c;又可以利用关系数…

2023年09月CCF-GESP编程能力等级认证C++编程一级真题解析

一、单选题(共15题,共30分) 第1题 我们通常说的“内存”属于计算机中的( )。 A:输出设备 B:输入设备 C:存储设备 D:打印设备 答案:C 第2题 以下C++不可以作为变量的名称的是( )。 A:redStar B:RedStar C:red_star D:red star 答案:D 第3题 C++表达式…