Python开发实战之用Python批量实现多Excel多Sheet合并的4种方法
小职 2021-03-05 来源 :转自:Python爬虫与数据挖掘 阅读 740 评论 0

摘要:本文主要介绍了Python开发实战之用Python批量实现多Excel多Sheet合并的4种方法,通过具体的内容向大家展现,希望对大家Python的学习有所帮助。

本文主要介绍了Python开发实战之用Python批量实现多Excel多Sheet合并的4种方法,通过具体的内容向大家展现,希望对大家Python的学习有所帮助。

Python开发实战之用Python批量实现多Excel多Sheet合并的4种方法

一、前言

 

大家好,我是崔艳飞。前两天给大家分享了Python自动化文章:手把手教你利用Python轻松拆分Excel为多个CSV文件,而后在Python进阶交流群里边有读者遇到一个问题,他有很多个Excel表格,他需要对这些Excel文件进行合并。

 

 Python开发实战之用Python批量实现多Excel多Sheet合并的4种方法

诚然,一个一个打开复制粘贴固然可行,但是该方法费时费力,还容易出错,几个文件还可以手动处理,要是几十个甚至上百个,你就抓瞎了,不过这问题对Python来说,so easy,一起来看看吧!

 

二、项目目标

 

用Python实现多Excel、多Sheet的合并处理。

 

三、项目准备

 

软件:PyCharm

 

需要的库:pandas, xlrd,os

 

四、项目分析

 

1)如何选择要合并的Excel文件?

 

利用os,获取所有要合并的Excel文件。

 

2)如何选择要合并的Sheet?

 

利用xlrd库进行Excel读取,获取要合并的Sheet名。

 

3)如何合并?

 

利用pandas库,对所有Sheet名逐一循环打开,通过concat()进行数据追加合并即可。

 

4)如何保存文件?

 

利用to_excel保存数据,得到最终合并后的目标文件。

 

五、项目实现

 

1、第一步导入需要的库

 

import pandas as pd

import xlrd

import os

2、第二步选择要合并的Excel文件

 

#要合并文件路径

   path="D:/b/"

   #获取文件夹下所有EXCEL名

   xlsx_names = [x for x in os.listdir(path) if x.endswith(".xlsx")]

3、第三步选择要合并的Sheet

 

# 获取第一个EXCEL名

 xlsx_names1 = xlsx_names[0]

 

 aa = path + xlsx_names1

 #打开第一个EXCEL

 first_file_fh=xlrd.open_workbook(aa)

 # 获取SHEET名

 first_file_sheet=first_file_fh.sheets()

4、第四步对Sheet内容进行循环合并

 

#按SHEET名循环

 for sheet_name in sheet_names:

     df = None

     # 按EXCEL名循环

     for xlsx_name in xlsx_names:

         sheet_na = pd.ExcelFile(path + xlsx_name).sheet_names

         if sheet_name in sheet_na:

             #print(sheet_name)

             _df = pd.read_excel(path + xlsx_name, sheet_name=sheet_name,header=None)

             if df is None:

                 df = _df

             else:

                 df = pd.concat([df, _df], ignore_index=True)

         else:continue

5、第五步保存合并后的文件

 

  df.to_excel(excel_writer=writer, sheet_name=sheet_name, encoding="utf-8", index=False)

    print(sheet_name + "  保存成功!共%d个,第%d个。" % (len(sheet_names),num))

    num += 1

writer.save()

writer.close()

六、效果展示

 

1、处理前Excel数据:

 Python开发实战之用Python批量实现多Excel多Sheet合并的4种方法

 

2、运行进度提示:

 Python开发实战之用Python批量实现多Excel多Sheet合并的4种方法

 

3、合并后的结果:

 Python开发实战之用Python批量实现多Excel多Sheet合并的4种方法

 

七、总结

 

本文介绍了如何利用Python对多个Excel文件、多Sheet进行合并处理,减少了很多复制粘贴的麻烦,省时省力,还不容易出错,代码不多,循环追加有点绕,想想也就明白了,不懂的随时留言提问,大家一起学习进步。

 

有想法的小伙伴还可以将文章中的代码进行打包,做成一个exe可执行的小软件,包装好发给别人使用,也可以赚点小费噢,关于打包的教程这里不再赘述,欢迎前往:三个你必须要记住的Pyinstaller打包命令——利用Python实现打包exe。

 

八、彩蛋

 

下面两份代码是群内小伙伴提供了,小编也自行测试了下,亲测有效,欢迎大家积极尝试噢!

 

来自群友Jayson的代码:

 

# -*- coding: utf-8 -*-

# @Author: hebe

# @Date:   2020-04-18 18:31:03

# @Last Modified by:   hebe

# @Last Modified time: 2020-04-18 19:40:48

import os  

import glob

import openpyxl

 

def merge_xlsx_files(xlsx_files):

    wb = openpyxl.load_workbook(xlsx_files[0])

    ws = wb.active

    ws.title = "merged result"

 

    for  filename in xlsx_files[1:]:

        workbook = openpyxl.load_workbook(filename)

        sheet = workbook.active

        for row in sheet.iter_rows(min_row=1):

            values = [cell.value for cell in row]

            ws.append(values)

    return wb

 

#path is very important here , must true.

def get_all_xlsx_files(path):

    xlsx_files = glob.glob(os.path.join(r'C:\\Users\\pdcfi\\Desktop\\', '*.xlsx'))

    sorted(xlsx_files, key=str.lower)

    return xlsx_files

 

def main():

    xlsx_files = get_all_xlsx_files(os.path.expanduser('~lmx'))

    wb = merge_xlsx_files(xlsx_files)

    wb.save('merged_form.xlsx')

 

if __name__ == '__main__':

    main()

     

print("all excel append OK!")

来自好友刘早起的代码:

 

# -*- coding: utf-8 -*-

from openpyxl import load_workbook, Workbook

import glob

 

path = "C:\\Users\\pdcfi\\Desktop\\excel\\"

new_workbook = Workbook()

new_sheet = new_workbook.active

 

# 用flag变量明确新表是否已经添加了表头,只要添加过一次就无须重复再添加

flag = 0

 

for file in glob.glob(path + '/*.xlsx'):

    workbook = load_workbook(file)

    sheet = workbook.active

 

    coloum_A = sheet['A']

    row_lst = []

    for cell in coloum_A:

        if cell:

            print(cell.row)

            row_lst.append(cell.row)

 

    if not flag:

        header = sheet[1]

        header_lst = []

        for cell in header:

            header_lst.append(cell.value)

        new_sheet.append(header_lst)

        flag = 1

 

    for row in row_lst:

        data_lst = []

        for cell in sheet[row]:

            data_lst.append(cell.value)

        new_sheet.append(data_lst)

 

new_workbook.save(path + '/' + '符合筛选条件的新表.xlsx')

来自群友Engineer的代码:

 

import tkinter as tk

from tkinter import filedialog

import os

import pandas as pd

import glob

 

root = tk.Tk()

root.withdraw()

 

# 选择文件夹位置

filelocation = os.path.normpath(filedialog.askdirectory(initialdir=os.getcwd()))

lst = []

 

# 读取文件夹下所有文件(xls和xlsx都读取)

for i in glob.glob(filelocation + "\\\\" + "*.*"):

    if os.path.splitext(i)[1] in [".xls", ".xlsx"]:

        lst.append(pd.read_excel(i))

 

# 保存合并后的excel文件

writer = pd.ExcelWriter(filedialog.asksaveasfilename(title="保存", initialdir=filelocation, defaultextension="xlsx",

                                                     filetypes=[("Excel 工作簿", "*.xlsx"),

                                                                ("Excel 97-2003 工作簿", "*.xls")]))

pd.concat(lst).to_excel(writer, 'all', index=False)

writer.save()

 

print('\n%d个文件已经合并成功!' % len(lst))

当然了,实现本文功能不仅仅限于上面提及的3种方式,使用pandas也是可以做到的,如果你还有其他方法,欢迎交个朋友一起学习交流!


我是小职,记得找我

✅ 解锁高薪工作

✅ 免费获取学习教程,开发工具,代码大全,参考书籍

Python开发实战之用Python批量实现多Excel多Sheet合并的4种方法

本文由 @小职 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程