Python-目录下相同格式的Excel文件合并
最近在客户现场接到一个任务,需要将全国所有省份的数据进行合并。目录是分层级的,首先是省份目录、然后地级市目录、最里面是区县目录。
需要将每个目录中的数据进行合并,然后添加4列数据,并将某一个列的数据进行拆分和处理。总共将近3000张个Excel文件需要处理,
如果手工处理的话,估计要搞一个星期才能搞完。为了在规定时间内完成任务,我通过编写python程序实现了这样的功能。
这里我简单分享下单个目录中Excel文件合并的模块。


Python代码:
#!/usr/bin/env python
# coding:utf-8
"""
@File Name: zwc002.py
@Version: 1.0
@Python Version: 3.7
@Author: liguanbin
@Created Time: 2021/5/21 9:04
@Software: PyCharm
@Desc:
"""
import os
import xlrd
import xlsxwriter
import glob
# 获取要合并的所有excel表格
def get_excel():
global file_path
global current_folder
global new_excel_path
file_path = input("请输入Excel文件所在的目录:")
if not file_path.endswith('\\'):
current_folder = os.path.basename(file_path)
file_path = file_path + "\\"
else:
current_folder = os.path.basename(os.path.dirname(file_path))
new_excel=current_folder + "_合并结果.xlsx"
new_excel_path = os.path.join(file_path,new_excel)
# 新建的exce文件绝对路径
if os.path.isfile(new_excel_path):
os.remove(new_excel_path)
# 如果文件已经存在就删除,避免重复执行插入重复
all_excel = glob.glob(file_path + "*.xlsx")
print("该目录下有" + str(len(all_excel)) + "个Excel文件:")
if (len(all_excel) == 0):
return 0
else:
for i in range(len(all_excel)):
print(all_excel[i])
return all_excel
# 获取sheet下的数据
def get_sheet_data(sheet):
row = sheet.nrows
for i in range(row):
if (i == 0):
global biao_tou
biao_tou = sheet.row_values(i)
continue
values = sheet.row_values(i)
all_data1.append(values)
return all_data1
if __name__ == '__main__':
all_excel = get_excel()
# 得到要合并的所有exce表格数据
if (all_excel == 0):
print("该目录下无.xlsx文件!请检查您输入的目录是否有误!")
exit()
all_data1 = []
# 用于保存合并的所有行的数据
# 下面开始文件数据的获取
for excel in all_excel:
fh = xlrd.open_workbook(excel)
# 打开文件
sheets = fh.sheets()
# 获取文件下的所有sheet
for sheet_index in range(len(sheets)):
all_data1 = get_sheet_data(sheets[sheet_index])
# 获取一个sheet下的所有行的数据,追加到数组中
all_data1.insert(0, biao_tou)
# 表头写入(只需要写入一个)
fh1 = xlsxwriter.Workbook(new_excel_path)
# 新建一个excel表
title_formater=fh1.add_format({'border': 1,'bold':True,'align':'center','bg_color':'3399FF','font_size':12})
# 标题格式:边框:1、加粗、居中、填充:蓝色、字体:12
common_formater = fh1.add_format({'border': 1})
# 数据格式:边框:1
new_sheet_name="执常委列表"
# 指定sheet的名称
new_sheet = fh1.add_worksheet(new_sheet_name)
# 新建一个sheet
for i in range(len(all_data1)):
for j in range(len(all_data1[i])):
c = all_data1[i][j]
if i==0:
new_sheet.write(i, j, c, title_formater)
else:
new_sheet.write(i, j, c,common_formater)
fh1.close()
# 关闭该exce表
print("\033[1;34m文件合并成功,请查看" + new_excel_path + "\033[0m")
效果演示:

合并后的文件:

Python-目录下相同格式的Excel文件合并的更多相关文章
- [bash]查找指定目录下符合格式的txt文件
需求: 查找指定目录下符合yyyy-MM-dd(-b)NNN.txt格式的文件,如“2020-03-22-b888.txt” 目标目录内容: [root@localhost bashs]# ll /r ...
- 把一个文件夹下的多个excel文件合并到同一个excel的一个sheet里
#!/usr/bin/python # -*- coding: UTF-8 -*- import pandas as pd import os if __name__ == '__main__': F ...
- 一个获取指定目录下一定格式的文件名称和文件修改时间并保存为文件的python脚本
摘自:http://blog.csdn.net/forandever/article/details/5711319 一个获取指定目录下一定格式的文件名称和文件修改时间并保存为文件的python脚本 ...
- Python遍历一个文件夹下有几个Excel文件及每个Excel文件有几个Sheet
一. 解决问题: 工作中常会遇到合并Excel文件的需求,Excel文件数量不确定,里面的Sheet 数量是可变的,Sheet Name是可变的,所以,需要用到遍历一个文件夹下有几个Excel文件,判 ...
- C#获取文件夹下指定格式的所有文件
C#获取文件夹下指定格式的所有文件的方法,虽然很简单,但还是分享一下吧,用到时可以稍加修改和优化就可以使用. 获取指定目录下所有文件 //最要使用 System.IO.Directory.GetFil ...
- [C#] .NET Core项目修改project.json来引用其他目录下的源码等文件的办法 & 解决多框架时 project.json 与 app.config冲突的问题
作者: zyl910 一.缘由 项目规模大了后,经常会出现源码文件分布在不同目录的情况,但.NET Core项目默认只有项目目录下的源码文件,且不支持"Add As Link"方式 ...
- .NET Core项目修改project.json来引用其他目录下的源码等文件的办法 & 解决多框架时 project.json 与 app.config冲突的问题
作者: zyl910 一.缘由 项目规模大了后,经常会出现源码文件分布在不同目录的情况,但.NET Core项目默认只有项目目录下的源码文件,且不支持“Add As Link”方式引入文件.这时需要手 ...
- Java基础知识强化之IO流笔记49:IO流练习之 复制指定目录下指定后缀名的文件并修改名称的案例
1. 复制指定目录下指定后缀名的文件并修改名称的案例 需求:复制指定目录下的指定文件,并修改后缀名. • 指定的文件是:.java文件. • 指定的后缀名是:.jad • 指 ...
- Tomcat下使用C3P0配置JNDI数据源(在项目的META-INF目录下创建context.xml的文件)
一.C3P0下载 C3P0下载地址:http://sourceforge.net/projects/c3p0/files/?source=navbar 下载完成之后得到一个压缩包
- [ Windows BAT Script ] 删除某个目录下的所有某类文件
删除某个目录下的所有某类文件 @echo off for /R %%s in (*.txt) do ( echo %%s del %%s ) pause @echo on
随机推荐
- C#绘制柱形图
柱形图数据 通过 panel 绘制柱形图 private void ShowPic() { Conn(); //打开数据库连接 using (cmd = new SqlCommand("SE ...
- java项目实践-webapp-mytomcat-day16
目录 1. http协议 2. 自定义的web框架 3. 具体实现 4. 启动 1. http协议 CS架构 建立连接"三次握手" 断开连接 "四次挥手" 三次 ...
- GoLang 指针初探
1. 内置类型和引用类型 Go 中内置类型包括数值类型,字符串类型和布尔类型.引用类型包括切片,映射,通道,接口和函数类型.其中,引用类型表示创建的变量包含一个指向底层数据结构的指针和一组管理底层数据 ...
- Oracle数据库期末考试--学堂在线
1.单选题 (2分) 在Oracle数据库中,下面哪类索引最适合SQL范围查找? 2.单选题 (2分) 在创建Oracle数据库表时,下面哪个元素不出现在CREATE TABLE语句中? 3.单选题 ...
- [转帖]PostgreSQL 的性能调优方法
https://juejin.cn/post/7119489847529570334 浅谈PostgreSQL的性能调校 PostgreSQL的性能调校是指调校数据库以提高性能和快速访问数据:我们可以 ...
- [转帖]CTF -bugku-misc(持续更新直到全部刷完)
CTF -bugku-misc(持续更新直到全部刷完) https://www.cnblogs.com/cat47/p/11432475.html 1.签到题 点开可见.(这题就不浪费键盘了) CTF ...
- [转帖]dd - Linux世界中的搬运工
<存储工具系列文章>主要介绍存储相关的测试和调试工具,包括不限于dd.fio.vdbench.iozone.iometer.cosbench等性能负载工具,及strace等调试工具. dd ...
- [转帖]linux--Segfault详解
linux--Segfault详解 1 简介 1.1 段错误的定义 1.2 痛点 2 知识点 2.1 报错内容 2.2 error number 3 排除步骤(借助汇编) 3.1 日志确定错误类型 3 ...
- Beyond Compare 的比较以及导出的简单设置方法
最近需要对文件进行对比 但是发现对比的工作量比较难搞. 用到了beyond compare 的工具 感觉挺好用的 但是需要注意事项比较多这里记录一下 1. session setting 里面进行设 ...
- SAP FICO 前台财务过账、预制功能分开
最近遇到一个变态要求,FB01 等涉及过账功能 要求根据'权限'判断用户是否有过账的功能.以下实现会有遗漏场景: 实现:hide 'SAVE'按钮 (ok_code = 'BU'). 根据状态栏设置' ...