python实现自动化之文件合并

时间:2023-12-29 11:53:21 来源:网络 浏览:47次

假如公司需要统计每个员工的个人信息,制定好模板后,由员工填写,然后发送到综合部进行汇总,在这种情况下,如果公司有上百位员工的信息需要统计,且采用纯手工进行复制粘贴的方式进行汇总,则将是一项耗时费力易错的工作。本文主要以一个简单的小例子,简述如何通过Pyhton进行自动化文件合并。

涉及知识点 xlrd模块:文件的读取 xlwt模块:文件的生成
设计思路

1、获取指定目录下所有excel格式的文件。
2、循环读取Excel文件内容【读取固定的行与列】,将内容暂存内存中。
3、将内存中数据,写入到新的Excel文件中,并保存到指定位置。

效果示例

本例为了简化操作,总共有10个需要汇总的文件,如下所示:

python实现自动化之文件合并

每一个文件采用相同模板,格式一致,如下所示:

python实现自动化之文件合并

汇总后的文件,如下所示:

python实现自动化之文件合并

核心代码

引入相关的模块,如下所示:

import xlrdimport xlwtimport os

读取excel内容,如下所示:

def read_excel(excel_folder: str): """ 读取Excel文档 :param excel_folder: :return: """ excel_files = [] # excel文件列表 excel_contents = [] # excel文件内容 files = os.listdir(path=excel_folder) if len(files) > 0: for file in files: if file.endswith(’.xls’): excel_files.append(file) if len(excel_files) == 0: print(’此目录下没有对应的Excel文件’) # 循环读取文档 for file in excel_files: full_path = os.path.join(excel_folder, file) book = xlrd.open_workbook(filename=full_path) sheet = book.sheet_by_index(sheetx=0) # 取固定位置的值 content = { ’名称’: sheet.cell_value(1, 0), ’年纪’: sheet.cell_value(1, 1), ’性别’: sheet.cell_value(1, 2), ’籍贯’: sheet.cell_value(1, 3) } excel_contents.append(content) return excel_contents

生成Excel内容,如下所示:

def write_excel(excel_path: str, excel_contents: list): """ 生成Excel文档 :param excel_path: :return: """ if len(excel_contents) == 0: print(’没有需要保存的内容’) return book = xlwt.Workbook(encoding=’utf-8’) sheet1 = book.add_sheet(’统计信息’) # 先写标题 sheet1.write(0, 0, ’名称’) sheet1.write(0, 1, ’年纪’) sheet1.write(0, 2, ’性别’) sheet1.write(0, 3, ’籍贯’) i = 1 for content in excel_contents: sheet1.write(i, 0, content[’名称’]) sheet1.write(i, 1, content[’年纪’]) sheet1.write(i, 2, content[’性别’]) sheet1.write(i, 3, content[’籍贯’]) i += 1 book.save(excel_path)

整体调用

excel_folder = r’D:MyProjectDemo01TESTEXCEL’excel_path = r’D:MyProjectDemo01TESTEXCEL汇总信息.xls’excel_contents = read_excel(excel_folder)# print(excel_contents)write_excel(excel_path, excel_contents)print(’done’)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持ABC学习网。

(window.slotbydup = window.slotbydup || []).push({id: "u6915441",container: "_5rmj5io5v3i",async: true});
评论
评论
发 布