python处理两个Excel并且根据相同字段合并写入一个新的Excel
在做数据处理的工作中,经常会遇见多个Excel文件,然后内容不同,有关联字段,需要将其合并在一起,然后生成一个新的文件放在一个新的excel里。
# 1.首先我们需要封装两个类
①一个类是专门读取Excel的,当然也可以封装单独写入到Excel,如果想在当行里边加
② 其次我们可以封装另外一个类,把两个Excel表的字段全部遍历出来,然后组合成嵌套列表的字典,然后再插入
新建一个
handle_excel.py
import openpyxl
from openpyxl import load_workbookclass EncapsulationExcel:"""封装Excel"""def __init__(self, filename, sheet=None):self.filename, self.sheet = filename, sheetdef operation_excel(self):"""操作Excel获取数据:return:"""# 1.打开Excelwb = load_workbook(self.filename)# 2.定位表单if self.sheet is None:ws = wb.activeelse:ws = wb[self.sheet]# 3.获取表数据values = tuple(ws.iter_rows(min_row=1, max_row=1, values_only=True))sheet_head_tuple = values[0]cases_list = [] # 将数据字典信息, 存放在列表中, 这个列表就是嵌套字典列表for data in tuple(ws.iter_rows(min_row=2, values_only=True)):cases_list.append(dict(zip(sheet_head_tuple, data)))return cases_listdef write_result(self, row, col, result):"""操作Excel数据,写入数据"""other_wb = load_workbook(self.filename)if self.sheet is None:other_ws = other_wb.activeelse:other_ws = other_wb[self.sheet]# if isinstance(row, int) and (2 <= row <= other_ws.max_row):if isinstance(row, int) and (row >= 2):# row表示行,column表示列,value表示插入值other_ws.cell(row=row, column=col, value=result)other_wb.save(self.filename)else:print("传入的行号有误,行号应大于1的整数")class OperationExcel(object):"""处理Excel数据,并且写入"""def __init__(self, sheet):"""根据嵌套字典获取Excel的表头:param sheet: 定义一个sheet的名称"""self.wb = openpyxl.Workbook()self.ws = self.wb.create_sheet(index=0, title=sheet)def get_title(self, data):""":param data: 传入json数据的嵌套字典:return: 返回所有字典的标题(keys)"""title_list = []for dic in data:for key in dic:if key not in title_list:title_list.append(key)return title_listdef handle_data(self, title_list, data, filename):""":param data: 调用get_title返回的标题列表:param data: 传入json数据的嵌套字典:return: 返回所有字典的标题(keys)"""# 1. 把列表的标题插入Excel的第一行first_row = 1for header in title_list:col = title_list.index(header)self.ws.cell(first_row, col + 1, header)# 2. 把所有的值,根据标题去筛选,插入excelrow = 2for player in data:for _key, _value in player.items():col = title_list.index(_key)self.ws.cell(row, col + 1, _value)row += 1 # enter the next rowself.wb.save(filename)self.wb.close()if __name__ == '__main__':filename = "上海数据.xlsx"sheet = "数据清洗"data = [{'欢迎': 4, "马上": 3, "登录": "成功"}, {'欢迎': 5, "马上": 7, "退出": "成功"}, {'欢迎': 9, "马上": 8, "注册": "失败"}]A = OperationExcel(sheet)title_list = A.get_title(data)# 清洗数据,写入ExcelA.handle_data(title_list=title_list,data=data,filename=filename)
# 2.我们需要处理数据,把上边的那个文件的代码导入
from handle_excel import EncapsulationExcel, OperationExcelclass ExcelEncapsulation(object):def __init__(self, file_name_1, file_name_2):"""初始化数据"""self.file_name1 = file_name_1self.file_name2 = file_name_2def write_excel_data(self, field_name_1, field_name_2, filename, sheetname):one_excel = EncapsulationExcel(filename=self.file_name1)two_excel = EncapsulationExcel(filename=self.file_name2)A = one_excel.operation_excel()B = two_excel.operation_excel()list_data = []for i in A:for j in B:if i[field_name_1] == j[field_name_2]:j.update(i)list_data.append(j)C = OperationExcel(sheetname)title_list = C.get_title(list_data)# 清洗数据,写入ExcelC.handle_data(title_list=title_list,data=list_data,filename=filename)if __name__ == '__main__':# 要比较的Excel文件名file_name_one = "截止20220612付费证书用户信息.xlsx"file_name_two = '成本数据_1654850871000.xlsx'# 要比较的两个Excel的相同的字段名field_name_one = '购买UIN'field_name_two = 'uin'# 创建新的Excel的文件名file_name = "文件名.xlsx"# 创建新的sheet名字sheet_name = "数据清洗"ExcelEncapsulation(file_name_one, file_name_two).write_excel_data(field_name_one, field_name_two, file_name,sheet_name)
执行完成,生成新的文件
python处理两个Excel并且根据相同字段合并写入一个新的Excel相关推荐
- 使用Python解决对比出两个Excel文件中的不同项并将结果重新写入一个新的Excel文件
使用Python解决对比出两个Excel文件中的不同项并将结果重新写入一个新的Excel文件 因为有统计成员到会情况的任务,每次汇总时都很麻烦,需要一个个对应腾讯会议导出名单的成员,然后在总表上进行标 ...
- python对excel两列求和写入另一列_python读取excel指定列数据并写入到新的excel方法...
如下所示: #encoding=utf-8 import xlrd from xlwt import * #------------------读数据------------------------- ...
- python 在excel指定列添加数据_python读取excel指定列数据并写入到新的excel方法
如下所示: #encoding=utf-8 import xlrd from xlwt import * #------------------读数据------------------------- ...
- python excel写入一列_python读取excel指定列数据并写入到新的excel方法
如下所示: #encoding=utf-8 import xlrd from xlwt import * #------------------读数据------------------------- ...
- 链表面试题3:将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成 的。
链表面试题3:将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成 的. 首先我们的思想是将得一个链表和第二个链表的每个结点进行比较,谁小谁就插入到新链表的最后. ...
- 将两个有序顺序表合并为一个新的有序顺序表MergeList_Sq
将两个有序顺序表合并为一个新的有序顺序表,输出合并后的顺序表的所有数据元素: #include<stdio.h> #include<stdlib.h> #define LIST ...
- 将两个有序顺序表合并为一个新的有序顺序表
将两个有序顺序表合并为一个新的有序顺序表 题目要求 基本思想 核心代码 完整代码(C++) 题目要求 将两个有序顺序表合并为一个新的有序顺序表,并由函数返回合并后的顺序表. 基本思想 非常经典的题目, ...
- 如何将两个或多个PDF文件合并成一个?这3个方法可以看看
在工作中,有时候我们需要把两个或多个PDF文件合并成一个,这样一来,可以方便阅读.修改,还能快速打印文件. 下面分享3个工具,看看如何将两个或多个PDF文件合并成一个文件. 方法一:使用美图工具 如果 ...
- C语言:将两个两位数的正整数a、b合并形成一个整数放在c中。
将两个两位数的正整数a.b合并形成一个整数放在c中.合并的方式是:将a数的十位和个位数依次放在c数的千位和十位上, b数的十位和个位数依次放在c数的个位和百位上.例如:当a=45,b=12.调用该函数 ...
最新文章
- SAMBA的一些特殊设置
- 我很高兴找了一张可以说明:为什么软件开发那么困难的图
- java jdk目录_Java开发工具包JDK安装和目录介绍
- 解决 用户'sa'登录失败。错误:18456 问题
- 阿里云MaxCompute(大数据)公开数据集---带你玩转人工智能 1
- Pyhton基础篇(1)-第一个Pyhton程序(已更新)
- 2017.8.11 OSU 失败总结
- 帮助打造无障碍APP Google将自动化测试GTXiLib
- 滚动吸顶效果--四种方式实现
- python和其它语言混合编程_C++和Python混合编程 - python嵌入C++
- 空间曲率(曲速)引擎的数学原理及示意图
- 手游pvp系统网络设计
- VMware虚拟机安装Kali破解WiFi密码
- np.ones(),np.zeros(), np.empty(),np.full(),np.ones_like() 基本用法
- 基于matlab的眼部疲劳检测
- IRM电源维修XRM65P50X3402高压发生器维修
- 处理Maven本地仓库.lastUpdated文件
- [问题未处理]-kubernetes报错request canceled (Client.Timeout exceeded while awaiting headers)
- 使用Python的PyPD创建PDF文档
- oracle ora 3136,ALERT日志中常见监听错误:ORA-3136错误的排查