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

  1. 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文件合并的更多相关文章

  1. [bash]查找指定目录下符合格式的txt文件

    需求: 查找指定目录下符合yyyy-MM-dd(-b)NNN.txt格式的文件,如“2020-03-22-b888.txt” 目标目录内容: [root@localhost bashs]# ll /r ...

  2. 把一个文件夹下的多个excel文件合并到同一个excel的一个sheet里

    #!/usr/bin/python # -*- coding: UTF-8 -*- import pandas as pd import os if __name__ == '__main__': F ...

  3. 一个获取指定目录下一定格式的文件名称和文件修改时间并保存为文件的python脚本

    摘自:http://blog.csdn.net/forandever/article/details/5711319 一个获取指定目录下一定格式的文件名称和文件修改时间并保存为文件的python脚本 ...

  4. Python遍历一个文件夹下有几个Excel文件及每个Excel文件有几个Sheet

    一. 解决问题: 工作中常会遇到合并Excel文件的需求,Excel文件数量不确定,里面的Sheet 数量是可变的,Sheet Name是可变的,所以,需要用到遍历一个文件夹下有几个Excel文件,判 ...

  5. C#获取文件夹下指定格式的所有文件

    C#获取文件夹下指定格式的所有文件的方法,虽然很简单,但还是分享一下吧,用到时可以稍加修改和优化就可以使用. 获取指定目录下所有文件 //最要使用 System.IO.Directory.GetFil ...

  6. [C#] .NET Core项目修改project.json来引用其他目录下的源码等文件的办法 & 解决多框架时 project.json 与 app.config冲突的问题

    作者: zyl910 一.缘由 项目规模大了后,经常会出现源码文件分布在不同目录的情况,但.NET Core项目默认只有项目目录下的源码文件,且不支持"Add As Link"方式 ...

  7. .NET Core项目修改project.json来引用其他目录下的源码等文件的办法 & 解决多框架时 project.json 与 app.config冲突的问题

    作者: zyl910 一.缘由 项目规模大了后,经常会出现源码文件分布在不同目录的情况,但.NET Core项目默认只有项目目录下的源码文件,且不支持“Add As Link”方式引入文件.这时需要手 ...

  8. Java基础知识强化之IO流笔记49:IO流练习之 复制指定目录下指定后缀名的文件并修改名称的案例

    1. 复制指定目录下指定后缀名的文件并修改名称的案例     需求:复制指定目录下的指定文件,并修改后缀名.  • 指定的文件是:.java文件.     • 指定的后缀名是:.jad     • 指 ...

  9. Tomcat下使用C3P0配置JNDI数据源(在项目的META-INF目录下创建context.xml的文件)

    一.C3P0下载 C3P0下载地址:http://sourceforge.net/projects/c3p0/files/?source=navbar 下载完成之后得到一个压缩包

  10. [ Windows BAT Script ] 删除某个目录下的所有某类文件

    删除某个目录下的所有某类文件 @echo off for /R %%s in (*.txt) do ( echo %%s del %%s ) pause @echo on

随机推荐

  1. apache-jmeter-5.6.3版本报错:errorlevel=1的解决办法

    一.背景: 今天遇到了apache-jmeter-5.6.3版本,下载解决后,打开bin下的:jmeter.bat报错 二.解决方法:  尝试解决了jmeter.bat的内存占用还是没有解决 最终发现 ...

  2. 06-Shell内置命令

    1.内置命令介绍 Shell 内置命令,就是由 Bash Shell 自身提供的命令,而不是文件系统中的可执行文件. 使用type 来确定一个命令是否是内置命令: type 命令 通常来说,内置命令会 ...

  3. SQL函数——时间函数

    1.使用 NOW() . CURDATE().CURTIME() 获取当前时间 在这里我有一个问题想问问大家,你们平时都是怎么样子获取时间的呢?是不是通过手表.手机.电脑等设备了解到的,那么你们有没有 ...

  4. Go-获取密码的sha值

    // 对用户密码进行加密 func EncodePwd(pwd string) string { s := sha256.New() s.Write([]byte(pwd)) data := s.Su ...

  5. Grub2 内核启动参数总结

    Grub2 内核启动参数总结 部分参数 biosdevname=0 net.ifnames=0 # 注意这个配置会修改网卡的名字, 比如之前是ens192 # 添加如上两个内容后就会变成 eth0 类 ...

  6. [转帖]renice和nice

    https://www.cnblogs.com/qiynet/p/17555881.html 将行程 id 为 987 及 32 的行程与行程拥有者为 daemon 及 root 的优先序号码加 1 ...

  7. [转帖]PostgreSQL 日志参数解释 常用环境日志参数配置

    1.常用日志参数 logging_collector = on/off  是否将日志重定向至文件中,默认是off(该配置修改后,需要重启DB服务),启动之后查看进程ps -ef|grep postgr ...

  8. [转帖]Linux Shell:date日期时间操作

    https://www.jianshu.com/p/cc9ebb212a8e 整理Linux Shell脚本中常用的日期操作,给予date命令,主要用法总结 获得当前日期,时间戳,date,date ...

  9. [转帖]Prometheus 都可以采集那些指标?-- 常用 Exporter 合集

    Prometheus 可以通过各种 Exporter 来获取很多指标,并且只要符合 Prometheus 规范的都可以获取到,本文汇总一些常用的采集器到这里.  Prometheus Exporter ...

  10. [转帖]docker 最新版本升级

    文章目录 前言 一.卸载低版本docker 1.1 检查docker版本 1.2 删除docker 二.开始安装 2.1 安装所需依赖 2.2 设置docker yum源 2.3 查看所有可用版本 2 ...