您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > Python

python 用os库和xlrd、xlwd库快速合并相同n个Excel文件操作实例

时间:2021-10-21 10:39:15  来源:  作者:懒人智慧办公

最近上班遇到一个新问题,新上线的医保系统太low,导出数据超过1万条的时候就导不出来了。逼得只有分为小表格导出,然后需要将这些表格汇总为一个大表格。刚好可以带大家学习如何利用Python/ target=_blank class=infotextkey>Python快速合并相同的几个Excel表格。当大家遇到类似问题时候就可以用这个简单办法解决问题了。比如有很多单位给你报表,你还在傻傻地一个表一个表的粘贴复制吗?

我们先来看看效果:

python 用os库和xlrd、xlwd库快速合并相同n个Excel文件操作实例

原始导出的文件结果


python 用os库和xlrd、xlwd库快速合并相同n个Excel文件操作实例

我导出了9个文件

最后我用Python快速将9个文件合成了一个汇总文件。本文教程给出了n的相同文件合并的方法(不相同文件也可以合并,只是机械地把数据汇总在一个表格中,只需要在参数设置中不设置标题就可以了。)

os库

  • 路径操作,使用子库path,处理文件路径及信息
  • 进程管理,启动系统中其他程序
  • 环境参数:获取系统软硬件信息等环境参数

path子库

os.listdir(url)#返回一个对应目录下所有文件名称的列表

使用需要引入path库

import os.path as op

操作

含有

os.path.abspath(path)

返回path在当前系统中的绝对路径

os.path.normpath(path)

返回统一用""分隔路径

os.path.relpath(path)

返回当前程序与文件之间的相对路径

os.path.dirname(path)

返回path中的目录名称

os.path.basename(path)

返回path中的最后的文件名称

os.path.join(path,*paths)

组合path与paths,返回一个路径字符串

os.path.exists(path)

判断路径对应的文件或者目录是否存在

os.path.isfile(path)

判断路径是否指向一个文件

os.path.isdir(path)

判断路径是否指向一个目录

os.path.getatime(path)

返回上一次访问该路径的时间

os.path.getmtime(path)

返回路径对应文件或目录最近修改时间

os.path.getctime(path)

返回路径对应文件或目录创建时间

os.path.getsize(path)

返回路径对应文件或目录字节大小

进程管理

执行程序或命令(cmd下的命令)

import os

os.system("c:\windows\System32\calc.exe")
python 用os库和xlrd、xlwd库快速合并相同n个Excel文件操作实例

打开系统计算器

import os
#下面的程序可以打开当前目录下的参数配置文件
os.startfile(r".合并Excel文件参数配置.txt")

环境参数

操作

含有

os.chdir(path)

修改当前程序操作的路径

os.getcwd()

返回程序的当前路径

os.getlogin()

获取当前系统登录用户名称

os.cpu_count()

获取当前系统cpu数量

os.urandom(n)

获取n个字节长度的随机字符串

xlrd库与xlwt库

本文使用一下几个xlrd的操作,这里简单说明,在基础学习中不做过多探讨。

  • data = xlrd.open_workbook(url) # 文件名以及路径,如果路径或者文件名有中文给前面加一个r拜师原生字符。
  • table = data.sheets()[0] # 通过索引顺序获取
  • nrows = table.nrows # 获取该sheet中的有效行数
  • num = table.row_values(i) # 返回由该行中所有单元格的数据组成的列表

本文使用一下几个xlrd的操作。

  • wa = xlwt.Workbook() # 创建工作簿
  • b = wa.add_sheet('汇总') # 添加“汇总”工作表
  • b.write(i, j, v) # 写入数据

本程序需要使用的库文件

import os
import os.path as op
import xlrd as xlrd
import xlwt as xlwt

本次程序的接口参数

使用text文件作为接口文件,事先定义好3个接口参数(要合并的文件目录、是否存在标题、合并后生产文件的文件名称)。下面的备注信息为我设置的接口参数,大家可以根据自己的需要设置

<提示文本>在下面一行配置准备合并的Excel文件目录:

C:UsersAdministratorDesktop测试目录

<提示文本>第一行是否为标题行1表示是,0表示否:

1

<提示文本>设置汇总文件的文件名及文件格式:

汇总.xlsx

下面是设置接口参数的Python函数(之前案例多次讲解,直接给出代码很简单的):

def set_param():
    '''在当前文件目录下配置参数文件,若文件存在则打开文件,不存在则创建一个参数文件再打开'''
    try:
        f = open(r".合并Excel文件参数配置.txt", "x", encoding="utf-8")
        data = '<提示文本>在下面一行配置准备合并的Excel文件目录:nC:\Users\Administrator\Desktop\测试目录n<提示文本>第一行是否为标题行1表示是,0表示否:n0n<提示文本>设置汇总文件的文件名及文件格式:n汇总.xlsx'
        f.write(data)
        f.close()
    except FileExistsError:
        pass
    os.startfile(r".合并Excel文件参数配置.txt")

以上代码可以检查python程序目录下是否有接口文件,如有就打开供用户修改,没有就生产一个新的默认接口文件,再打开供用户修改。

程序获取配置好的接口参数

def get_param():
    '''获取用户配置好的配置文件'''
    param = {}
    f = open(r".合并Excel文件参数配置.txt", "r", encoding="utf-8")
    file_data = f.readlines()
    f.close()
    param["url"] = file_data[1].replace('n', "")
    param["title"] = eval(file_data[3].replace('n', ""))
    param["file_name"] = file_data[5].replace('n', "")
    return param

非常简单,之前多次分析过,就不再多说了。

本程序的核心程序类型,合并操作

基本思想就是通过os操作获取目标目录下的所有文件名列表,再循环遍历这些文件(需要使用op.join(param["url"], file)来打开完整的具体文件路径,不懂的可以回头看看本文上面讲述的os库子库path的具体操作)

然后通过xlrd库读取数据出入二位列表values中

最后通过xlwt库将values中的数据输出到需要保持的Excel文件中

以下给出具体的代码:

def merge_excel(param):
    '''合并同类型的Excel文件'''
    files = os.listdir(param["url"])
    values = []  # 存放获取的Excel文件内容
    for file in files:
        if file == param["file_name"]: continue  # 不统计与汇总文件同名的文件,避免可能的重复统计
        # 将所有文件的内容都放入values变量中
        url = op.join(param["url"], file)
        data = xlrd.open_workbook(url)
        table = data.sheets()[0]
        nrows = table.nrows
        if param["title"] == 1:
            # 若文件存在标题,把第一个读取到的文件标题做问所有内容的标题
            if file == files[0]:
                title = table.row_values(0)
                title.Append("数据来源")
                values.append(title)
        for i in range(param["title"], nrows):
            val = table.row_values(i)
            val.append(file)
            values.append(val)
    wa = xlwt.Workbook()  # 创建工作簿
    b = wa.add_sheet('汇总')  # 添加“汇总”工作表
    for i in range(len(values)):
        # 写入数据
        for j in range(len(values[i])):
            b.write(i, j, values[i][j])
    wa.save(op.join(param["url"], param["file_name"]))
    print("文件合并成功")

为了增强程序互动,设计一个非常简单的菜单。

这个菜单可以很方便地修改为其他程序的菜单,大家可以看看,非常之简单

def menu():
    '''打印用户交互界面,获取用户操作'''
    print("合并同类Excel文件".center(48, "*"))
    print("1.配置参数")
    print("2.运行合并程序")
    print("3.打开合并后文件目录")
    print("4.退出程序")
    print("".center(50, "*"))
    while True:
        try:
            s = eval(input("请输入操作序号"))
        except:
            s = 0
        if s in [1, 2, 3, 4]:
            return s
        else:
            print('输入错误请重新输入')

最后就是控制流程主函数了

def main():
    while True:
        m = menu()
        if m == 1:
            set_param()
            input("设置好后按回车继续")
        elif m == 2:
            param = get_param()
            merge_excel(param)
        elif m == 3:
            try:
                os.startfile(param["url"])
            except:
                print("还没有获取到配置参数中的文件路径,请先运行合并程序,输入2运行合并程序")
        elif m == 4:
            break

结语

今天终于把最后一篇python基础的操作写完了,来头条写文章最大的收获不少一分两分钱,而是真正的可以鞭策自己主动学习,持续学习。虽然一个上班族有的时候确实很忙,但能够学习进步、分析知识也比无聊玩手机好很多,感兴趣的可以一起讨论学习,共同进步。这是全套基础Python学习笔记的链接,贡献给各位粉丝们,能够阅读到这个地方也真心感谢您的支持!

最基础的python学习笔记(入门级)

 

本文全部代码

import os
import os.path as op
import xlrd as xlrd
import xlwt as xlwt


def menu():
    '''打印用户交互界面,获取用户操作'''
    print("合并同类Excel文件".center(48, "*"))
    print("1.配置参数")
    print("2.运行合并程序")
    print("3.打开合并后文件目录")
    print("4.退出程序")
    print("".center(50, "*"))
    while True:
        try:
            s = eval(input("请输入操作序号"))
        except:
            s = 0
        if s in [1, 2, 3, 4]:
            return s
        else:
            print('输入错误请重新输入')


def set_param():
    '''在当前文件目录下配置参数文件,若文件存在则打开文件,不存在则创建一个参数文件再打开'''
    try:
        f = open(r".合并Excel文件参数配置.txt", "x", encoding="utf-8")
        data = '<提示文本>在下面一行配置准备合并的Excel文件目录:nC:\Users\Administrator\Desktop\测试目录n<提示文本>第一行是否为标题行1表示是,0表示否:n0n<提示文本>设置汇总文件的文件名及文件格式:n汇总.xlsx'
        f.write(data)
        f.close()
    except FileExistsError:
        pass
    os.startfile(r".合并Excel文件参数配置.txt")


def get_param():
    '''获取用户配置好的配置文件'''
    param = {}
    f = open(r".合并Excel文件参数配置.txt", "r", encoding="utf-8")
    file_data = f.readlines()
    f.close()
    param["url"] = file_data[1].replace('n', "")
    param["title"] = eval(file_data[3].replace('n', ""))
    param["file_name"] = file_data[5].replace('n', "")
    return param


def merge_excel(param):
    '''合并同类型的Excel文件'''
    files = os.listdir(param["url"])
    values = []  # 存放获取的Excel文件内容
    for file in files:
        if file == param["file_name"]: continue  # 不统计与汇总文件同名的文件,避免可能的重复统计
        # 将所有文件的内容都放入values变量中
        url = op.join(param["url"], file)
        data = xlrd.open_workbook(url)
        table = data.sheets()[0]
        nrows = table.nrows
        if param["title"] == 1:
            # 若文件存在标题,把第一个读取到的文件标题做问所有内容的标题
            if file == files[0]:
                title = table.row_values(0)
                title.append("数据来源")
                values.append(title)
        for i in range(param["title"], nrows):
            val = table.row_values(i)
            val.append(file)
            values.append(val)
    wa = xlwt.Workbook()  # 创建工作簿
    b = wa.add_sheet('汇总')  # 添加“汇总”工作表
    for i in range(len(values)):
        # 写入数据
        for j in range(len(values[i])):
            b.write(i, j, values[i][j])
    wa.save(op.join(param["url"], param["file_name"]))
    print("文件合并成功")


def main():
    while True:
        m = menu()
        if m == 1:
            set_param()
            input("设置好后按回车继续")
        elif m == 2:
            param = get_param()
            merge_excel(param)
        elif m == 3:
            try:
                os.startfile(param["url"])
            except:
                print("还没有获取到配置参数中的文件路径,请先运行合并程序,输入2运行合并程序")
        elif m == 4:
            break


main()


Tags:python   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
1、让我们一起来看下吧,直接上图。 第一眼看到是不是觉得很高逼格,暗黑画风,这很大佬。其实它就是------AidLearning。一个运行在安卓平台的linux系统,而且还包含了许多非常强大...【详细内容】
2022-07-15  Tags: python  点击:(2)  评论:(0)  加入收藏
真正的大师,永远都怀着一颗学徒的心! 一、项目简介 今天说的这个软件是一款基于Python+vue的自动化运维、完全开源的云管理平台。二、实现功能 基于RBAC权限系统 录像回放 ...【详细内容】
2022-07-14  Tags: python  点击:(3)  评论:(0)  加入收藏
前言今天笔者想和大家来聊聊python接口自动化的MySQL数据连接,废话不多说咱们直接进入主题吧。 一、什么是 PyMySQL?PyMySQL是在Python3.x版本中用于连接MySQL服务器的一个库,P...【详细内容】
2022-07-11  Tags: python  点击:(19)  评论:(0)  加入收藏
aiohttp什么是 aiohttp?一个异步的 HTTP 客户端\服务端框架,基于 asyncio 的异步模块。可用于实现异步爬虫,更快于 requests 的同步爬虫。安装pip install aiohttpaiohttp 和 r...【详细内容】
2022-07-11  Tags: python  点击:(15)  评论:(0)  加入收藏
今天我们学习下 Queue 的进阶用法。生产者消费者模型在并发编程中,比如爬虫,有的线程负责爬取数据,有的线程负责对爬取到的数据做处理(清洗、分类和入库)。假如他们是直接交互的,...【详细内容】
2022-07-06  Tags: python  点击:(34)  评论:(0)  加入收藏
继承:是面向对象编程最重要的特性之一,例如,我们每个人都从祖辈和父母那里继承了一些体貌特征,但每个人却又不同于父母,有自己独有的一些特性。在面向对象中被继承的类是父类或基...【详细内容】
2022-07-06  Tags: python  点击:(25)  评论:(0)  加入收藏
点击上方头像关注我,每周上午 09:00准时推送,每月不定期赠送技术书籍。本文1553字,阅读约需4分钟 Hi,大家好,我是CoCo。在上一篇Python自动化测试系列文章:Python自动化测试之P...【详细内容】
2022-07-05  Tags: python  点击:(27)  评论:(0)  加入收藏
第一种方式:res = requests.get(url, params=data, headers = headers)第二种方式:res = requests.get(url, data=data, headers = headers)注意:1.url格式入参只支持第一种方...【详细内容】
2022-07-05  Tags: python  点击:(19)  评论:(0)  加入收藏
什么是python类的多态python的多态,可以为不同的类实例,或者说不同的数据处理方式,提供统一的接口。用比喻的方式理解python类的多态比如,同一个苹果(统一的接口)在孩子的眼里(类实...【详细内容】
2022-07-04  Tags: python  点击:(28)  评论:(0)  加入收藏
假设某日我开了一家空调公司,暂且就叫他天强空调安装设备公司吧,假装自己有公司,接了一单大生意,就是给甘肃省的各个高校安装空调(其实这边的气候基本用不到空调,就是假想一下),那么...【详细内容】
2022-07-01  Tags: python  点击:(33)  评论:(0)  加入收藏
▌简易百科推荐
近几年 Web3 被炒得火热,但是大部分人可能还不清楚什么是 Web3,今天就让w3cschool编程狮小师妹带你了解下 Web3 是什么?与我们熟知的 Web1 和 Web2 又有什么区别呢?web3.0什么是...【详细内容】
2022-07-15  编程狮W3Cschool    Tags:Web3.0   点击:(2)  评论:(0)  加入收藏
1、让我们一起来看下吧,直接上图。 第一眼看到是不是觉得很高逼格,暗黑画风,这很大佬。其实它就是------AidLearning。一个运行在安卓平台的linux系统,而且还包含了许多非常强大...【详细内容】
2022-07-15  IT智能化专栏    Tags:AidLearning   点击:(2)  评论:(0)  加入收藏
真正的大师,永远都怀着一颗学徒的心! 一、项目简介 今天说的这个软件是一款基于Python+vue的自动化运维、完全开源的云管理平台。二、实现功能 基于RBAC权限系统 录像回放 ...【详细内容】
2022-07-14  菜鸟程序猿    Tags:Python   点击:(3)  评论:(0)  加入收藏
前言今天笔者想和大家来聊聊python接口自动化的MySQL数据连接,废话不多说咱们直接进入主题吧。 一、什么是 PyMySQL?PyMySQL是在Python3.x版本中用于连接MySQL服务器的一个库,P...【详细内容】
2022-07-11  测试架构师百里    Tags:python   点击:(19)  评论:(0)  加入收藏
aiohttp什么是 aiohttp?一个异步的 HTTP 客户端\服务端框架,基于 asyncio 的异步模块。可用于实现异步爬虫,更快于 requests 的同步爬虫。安装pip install aiohttpaiohttp 和 r...【详细内容】
2022-07-11  VT漫步    Tags:aiohttp   点击:(15)  评论:(0)  加入收藏
今天我们学习下 Queue 的进阶用法。生产者消费者模型在并发编程中,比如爬虫,有的线程负责爬取数据,有的线程负责对爬取到的数据做处理(清洗、分类和入库)。假如他们是直接交互的,...【详细内容】
2022-07-06  VT漫步    Tags:Python Queue   点击:(34)  评论:(0)  加入收藏
继承:是面向对象编程最重要的特性之一,例如,我们每个人都从祖辈和父母那里继承了一些体貌特征,但每个人却又不同于父母,有自己独有的一些特性。在面向对象中被继承的类是父类或基...【详细内容】
2022-07-06  至尊小狸子    Tags:python   点击:(25)  评论:(0)  加入收藏
点击上方头像关注我,每周上午 09:00准时推送,每月不定期赠送技术书籍。本文1553字,阅读约需4分钟 Hi,大家好,我是CoCo。在上一篇Python自动化测试系列文章:Python自动化测试之P...【详细内容】
2022-07-05  CoCo的软件测试小栈    Tags:Python   点击:(27)  评论:(0)  加入收藏
第一种方式:res = requests.get(url, params=data, headers = headers)第二种方式:res = requests.get(url, data=data, headers = headers)注意:1.url格式入参只支持第一种方...【详细内容】
2022-07-05  独钓寒江雪之IT    Tags:Python request   点击:(19)  评论:(0)  加入收藏
什么是python类的多态python的多态,可以为不同的类实例,或者说不同的数据处理方式,提供统一的接口。用比喻的方式理解python类的多态比如,同一个苹果(统一的接口)在孩子的眼里(类实...【详细内容】
2022-07-04  写小说的程序员    Tags:python类   点击:(28)  评论:(0)  加入收藏
站内最新
站内热门
站内头条