大家好~ 老Amy来啦!已经n久没有给大家输出关于办公自动化的文章了…为什么呢?罗列原因:

  • 太忙!(被领导“压榨”)
  • 太忙!(没有额外的精力揣测大家办公的需求)
  • 太忙!(持续吃瓜中)

然鹅,一位朋友的困惑成为了我这种“麻木状态”的终结者,他提出需求如下:

想不断尝试的老Amy,开启了思考模式:“我要怎么实现这个需求呢?”。

不用着急,首先我们来分析数据本身。

分析数据特征如下:

  • 数据所在路径 C:\Users\logic\Desktop\mytest\file_dir
  • data01.xlsx 数据如下:
  • data02.xlsx 数据如下:

由上可得信息如下:

  • 所有 xlsx 工作簿都在同一个文件夹下
  • data01.xlsxdata02.xlsx 中 sheet 名相同的进行合并。也就是202001与202001合并,其它同理。

我们需要合并数据,首先需要读取到每个工作簿下每个工作表的数据,实现流程如下:

  • 获取文件夹下所有工作簿名
  • 拼接为绝对路径
  • 读取所有表格数据
  • 保存到空列表中

那要通过代码完成上面的连环操作,我们就需要使用到 python 中的内置模块 os 模块——与操作系统进行交互的模块,来获取文件夹下所有工作簿名,代码如下:

import os  # 导入模块# 列出 C:\Users\logic\Desktop\mytest\file_dir 下所有文件名
file_name_li = os.listdir(r"C:\Users\logic\Desktop\mytest\file_dir")
file_name_li---------------------------------------------------------------------
['data01.xlsx', 'data02.xlsx']

但此时,无法只通过文件名去系统中找到对应的文件,所以我们需要更准确一点儿的地址——绝对路径,所以现在我们需要拼接每个文件的绝对路径。代码如下:

# 遍历出每个文件名
for file_name in file_name_li:# 将文件夹绝对路径 与 文件名进行拼接file_path_li = os.path.join(r"C:\Users\logic\Desktop\mytest\file_dir",file_name)print(file_path_li)--------------------------------------------------------------------
C:\Users\logic\Desktop\mytest\file_dir\data01.xlsx
C:\Users\logic\Desktop\mytest\file_dir\data02.xlsx

有了文件的绝对路径后,我们就可以来读取文件中的数据,那就要使用到法宝 pandas 了。首先大家注意,pandas 并不是 python 的内置模块,而是需要我们去安装的。然后使用 pandas 的 read_excel() 方法读取数据,但是需要注意的是,此时我们需要读取的是工作簿下的所有工作表,所以需要指定 sheet_name 为 None,否则会默认读取第一个工作表。代码如下:

# 遍历出每个文件名
for file_name in file_name_li:# 将文件夹绝对路径 与 文件名进行拼接file_path_li = os.path.join(r"C:\Users\logic\Desktop\mytest\file_dir",file_name)# 读取 excel 表格数据all_data = pd.read_excel(file_path_li,sheet_name=None)print(all_data)--------------------------------------------------------------------
OrderedDict([('202001',         车牌号  驾驶员      起始公里    截至公里   里程数     加油金额    加油公升
0    鄂J0969   陈燕  186701.0  186935   234   267.07   32.41
1    鄂A25JL  NaN       NaN       0     0      NaN     NaN
2    鄂A37NK   吕扬   40283.0   40993   710   512.08   68.37
3    鄂A332B  NaN       NaN       0     0      NaN     NaN
4   鄂A3J78L   尚超       0.0      33    33      NaN     NaN
5   鄂A484ZF   鲁浩   50286.0   52574  2288  1340.84  191.45
6    鄂A620J   袁耀   41398.0   43604  2206  1579.69  225.67
7    鄂A7A8Z   志勇   41560.0   42883  1323   788.48  107.57
8   鄂AJ37Y    刘冲       0.0      73    73      NaN     NaN
9   鄂AD9251   毛义    3214.0    3349   135      NaN     NaN
10  鄂AD2192   赵敏     434.0     796   362      NaN     NaN),...], ...)

从上打印出的结果(我取了第一个),会发现它的类型为 OrderedDict ,虽然组合起来好像不是很看得懂,但是分开来看,它的本质实际上是 Dict。所以实际上我们可以通过 202001 来获取对应的数据值。如:

# 遍历出每个文件名
for file_name in file_name_li:# 将文件夹绝对路径 与 文件名进行拼接file_path_li = os.path.join(r"C:\Users\logic\Desktop\mytest\file_dir",file_name)# 读取 excel 表格数据all_data = pd.read_excel(file_path_li,sheet_name=None)print(all_data["202001"])---------------------------------------------------------------------
车牌号  驾驶员      起始公里    截至公里   里程数     加油金额    加油公升
0    鄂J0969   陈燕  186701.0  186935   234   267.07   32.41
1    鄂A25JL  NaN       NaN       0     0      NaN     NaN
2    鄂A37NK   吕扬   40283.0   40993   710   512.08   68.37
3    鄂A332B  NaN       NaN       0     0      NaN     NaN
4   鄂A3J78L   尚超       0.0      33    33      NaN     NaN
5   鄂A484ZF   鲁浩   50286.0   52574  2288  1340.84  191.45
6    鄂A620J   袁耀   41398.0   43604  2206  1579.69  225.67
7    鄂A7A8Z   志勇   41560.0   42883  1323   788.48  107.57
8   鄂AJ37Y    刘冲       0.0      73    73      NaN     NaN
9   鄂AD9251   毛义    3214.0    3349   135      NaN     NaN
10  鄂AD2192   赵敏     434.0     796   362      NaN     NaN车牌号 驾驶员    起始公里    截至公里   里程数     加油金额    加油公升
0    鄂J0039  周鹏   15512   15512     0      NaN     NaN
1    鄂J0021  王林    7790    7790     0      NaN     NaN
2    鄂J0022  徐涛  373505  373505     0      NaN     NaN
3    鄂J0079  赵舟  431169  431169     0      NaN     NaN
4   鄂J0018   郭鹰    3635    3635     0      NaN     NaN
5    鄂J0808  周尊  257743  257743     0      NaN     NaN
6    鄂J01X3  胡志   72000   72150   150   159.26   25.16
7    鄂J01X0  吴军   73031   73568   537   393.46   58.12
8    鄂J0F12  宋安  149017  149050    33     0.00    0.00
9    鄂J0F52  金煜  150617  150617     0      NaN     NaN
10   鄂J0272  刘兵   58124   58305   181     0.00    0.00
11   鄂J02F2  胡飞  169665  169665     0      NaN     NaN
12   鄂J0292  王勇  111625  113121  1496  1081.37  156.54
13   鄂J05R0  刘金   99278   99278     0      NaN     NaN

从打印结果,可以发现,我们通过 202001 可以取到两个工作簿中 202001 的数据,这是为什么呢?傻瓜,因为循环呀~所以,现在我们就想,把数据都添加到一个列表中。除此之外,我们还需要工作表名来获取数据,也就是将工作表名保存到一个集合中(以便去重)。

# 定义文件名集合
all_file_name = set()
# 定义数据列表
all_data_li = []# 遍历出每个文件名
for file_name in file_name_li:# 将文件夹绝对路径 与 文件名进行拼接file_path_li = os.path.join(r"C:\Users\logic\Desktop\mytest\file_dir",file_name)# 读取 excel 表格数据all_data = pd.read_excel(file_path_li,sheet_name=None)# 将数据添加到数据列表中all_data_li.append(all_data)# 将工作表名添加到文件夹集合中for name in all_data:all_file_name.add(name)print(all_data_li)
print(all_file_name)

有了这些宝贝之后,我们就可以来实现非常关键的步骤了,也就是取出相同名称的工作表进行拼接保存到新的工作表中。

不过仍然要思考的是,我们怎么使用 pandas 给一个工作簿中添加多个工作表呢?那就需要使用 pd.ExcelWriter了。代码如下:

# 创建工作簿
writer = pd.ExcelWriter("all_data.xlsx")# 遍历每个工作表名
for sheet_name in all_file_name:data_li = []# 遍历数据for data in all_data_li:# 获取同名数据并添加到data_li中n_rows = data_li.append(data[sheet_name])# 将同名数据进行拼接group_data = pd.concat(data_li)# 保存到writer工作簿中,并指定工作表名为sheet_namegroup_data.to_excel(writer,sheet_name=sheet_name)# 千万莫忘记,保存工作簿
writer.save()


就酱,实现完毕啦~哈哈哈哈哈

python实现合并多个excel中同名的sheet相关推荐

  1. python 批量读取xlsx并合并_python合并多个excel表格数据-python如何读取多个excel合并到一个excel中...

    python如何读取多个excel合并到一个excel中 思路 利用python xlrd包读取excle文件,然后将文件内容存入一个列表中,再利用xlsxwriter将内容写入到一个新的excel文 ...

  2. 用python处理excel数据做函数_如何使用python通过函数式编程完成excel中的数据处理及分析工作...

    Excel是数据分析中最常用的工具,本篇文章通过python与excel的功能对比介绍如何使用python通过函数式编程完成excel中的数据处理及分析工作.在Python中pandas库用于数据处理 ...

  3. 如何使用Python脚本合并多个Excel文件

    merge 由于工作需要,客户需要将多个excel文件合并成一个excel中,之前也没有接触过python.于是上网查找,大概学了一下,折腾了一下午,终于并实现了该功能,在这里总结一下,分享出来供大家 ...

  4. 将多个excel合并到同一个Excel中的多个sheet页,并且以原表名命名sheet页(Office)

    利用office实现将多个excel合并到同一个Excel中的多个sheet页,并且以原表名命名sheet页. 具体的操作步骤可参考以下: 第一:新建一个工作表 第二:在新建的sheet表中" ...

  5. 如何合并多个excel中(excel表格样式都一样)

    合并excel分为两种情况:1.将多个excel文件合并在一个excel中的不同sheet中.2.将多个excel文件合并在一个excel文件的一个sheet中. 1.将多个excel的文件合并在一个 ...

  6. python 实现读取excel中的所有sheet后,增加新的sheet,生成新的excel文件

    python 实现读取excel中的所有sheet后,增加新的sheet,生成新的excel文件 import pandas as pd import osPath = r"C:\Users ...

  7. python保存dataframe数据到excel中,处理列宽数据格式等

    python保存dataframe数据到excel中,处理列宽数据格式等 前言 1,比较简单的datafame 生成excel代码 2,采用excelwriter 包进行数据列的改造 3,根据具体数据 ...

  8. 合并多个Excel ,批量修改sheet名,批量删除多个指定sheet

    合并多个Excel 到同一个工作簿中,批量修改sheet名,批量删除指定sheet (60条消息) 合并多个Excel ,批量修改sheet名,批量删除多个指定sheet_aldsong123的博客- ...

  9. excel清空sheet内容 poi_POI操作Excel:隐藏、删除Excel中指定的Sheet

    使用POI操作Excel时如何隐藏.删除Excel中指定的Sheet呢?在POI的API中的HSSFWorkbook类提供了相关的方法, (1)隐藏Sheet: setSheetHidden(int ...

  10. python pandas合并多个excel,三行Python代码,合并多个Excel文件

    嘴上说着单身(Excel)挺好,可是看到合适的人(Python),还是会沉默... 下面是三个Excel文件内容: 下面是生成的汇总表: 第一步:安装相关包并导入 只用到了Python自带的OS模块, ...

最新文章

  1. 在阿里云服务器(ECS)上从零开始搭建nginx服务器
  2. iframe高度动态自适应
  3. 通信 / 各种协议默认端口汇总
  4. ICLR 2020 | GAN是否真的判断出了数据的真假?
  5. think queue 消息队列初体验
  6. Facebook史上最严重宕机:互联网企业是时候重新审视架构了?
  7. 微课系列(一):Python列表remove()方法工作原理
  8. PAT: gets’ was not declared in this scope gets(s)
  9. 移动端日历插件_小程序日历组件开发教程!
  10. CSS 设置背景颜色透明,文字不透明
  11. WPF整理-使用ResourceDictionary管理Logical Resources
  12. yum和apt-get 软件包管理器的用法及区别
  13. springboot配置文件中的敏感信息加密
  14. ARC100C Linear Approximation
  15. 静态代理和动态代理原理及实现
  16. 计算机中cpu是指什么意思,CPU是什么?CPU又是什么意思?
  17. STM32使用MDK keil 调试问题汇总
  18. 【splishsplash】修复catch.hpp的问题
  19. perl 一行命令 2021-09-02
  20. iceoryx(冰羚)-IPC中间件交叉编译

热门文章

  1. 苹果计算机恢复计算器,苹果自带计算器删除怎么恢復
  2. [Python爬虫] 简单网络爬虫抓取博客文章及思想介绍
  3. 目标检测之DarkNet-DarkNet源码解读<二>训练篇
  4. python 经典图书排行榜_知乎必读书单排行榜
  5. css 写一个左中右布局占满屏幕,左右两块固定宽度200,中间自适应宽,先加载中间块
  6. ubuntu19.04下VirtualBox与虚拟机win7共享文件夹
  7. Qt开发——图片缩放简述
  8. TreeSet的两种排序方式
  9. odoo 12: 字段(Fields)
  10. 你离成为程序员的梦想仅一“证”之遥