在做数据处理的工作中,经常会遇见多个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相关推荐

  1. 使用Python解决对比出两个Excel文件中的不同项并将结果重新写入一个新的Excel文件

    使用Python解决对比出两个Excel文件中的不同项并将结果重新写入一个新的Excel文件 因为有统计成员到会情况的任务,每次汇总时都很麻烦,需要一个个对应腾讯会议导出名单的成员,然后在总表上进行标 ...

  2. python对excel两列求和写入另一列_python读取excel指定列数据并写入到新的excel方法...

    如下所示: #encoding=utf-8 import xlrd from xlwt import * #------------------读数据------------------------- ...

  3. python 在excel指定列添加数据_python读取excel指定列数据并写入到新的excel方法

    如下所示: #encoding=utf-8 import xlrd from xlwt import * #------------------读数据------------------------- ...

  4. python excel写入一列_python读取excel指定列数据并写入到新的excel方法

    如下所示: #encoding=utf-8 import xlrd from xlwt import * #------------------读数据------------------------- ...

  5. 链表面试题3:将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成 的。

    链表面试题3:将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成 的. 首先我们的思想是将得一个链表和第二个链表的每个结点进行比较,谁小谁就插入到新链表的最后. ...

  6. 将两个有序顺序表合并为一个新的有序顺序表MergeList_Sq

    将两个有序顺序表合并为一个新的有序顺序表,输出合并后的顺序表的所有数据元素: #include<stdio.h> #include<stdlib.h> #define LIST ...

  7. 将两个有序顺序表合并为一个新的有序顺序表

    将两个有序顺序表合并为一个新的有序顺序表 题目要求 基本思想 核心代码 完整代码(C++) 题目要求 将两个有序顺序表合并为一个新的有序顺序表,并由函数返回合并后的顺序表. 基本思想 非常经典的题目, ...

  8. 如何将两个或多个PDF文件合并成一个?这3个方法可以看看

    在工作中,有时候我们需要把两个或多个PDF文件合并成一个,这样一来,可以方便阅读.修改,还能快速打印文件. 下面分享3个工具,看看如何将两个或多个PDF文件合并成一个文件. 方法一:使用美图工具 如果 ...

  9. C语言:将两个两位数的正整数a、b合并形成一个整数放在c中。

    将两个两位数的正整数a.b合并形成一个整数放在c中.合并的方式是:将a数的十位和个位数依次放在c数的千位和十位上, b数的十位和个位数依次放在c数的个位和百位上.例如:当a=45,b=12.调用该函数 ...

最新文章

  1. SAMBA的一些特殊设置
  2. 我很高兴找了一张可以说明:为什么软件开发那么困难的图
  3. java jdk目录_Java开发工具包JDK安装和目录介绍
  4. 解决 用户'sa'登录失败。错误:18456 问题
  5. 阿里云MaxCompute(大数据)公开数据集---带你玩转人工智能 1
  6. Pyhton基础篇(1)-第一个Pyhton程序(已更新)
  7. 2017.8.11 OSU 失败总结
  8. 帮助打造无障碍APP Google将自动化测试GTXiLib
  9. 滚动吸顶效果--四种方式实现
  10. python和其它语言混合编程_C++和Python混合编程 - python嵌入C++
  11. 空间曲率(曲速)引擎的数学原理及示意图
  12. 手游pvp系统网络设计
  13. VMware虚拟机安装Kali破解WiFi密码
  14. np.ones(),np.zeros(), np.empty(),np.full(),np.ones_like() 基本用法
  15. 基于matlab的眼部疲劳检测
  16. IRM电源维修XRM65P50X3402高压发生器维修
  17. 处理Maven本地仓库.lastUpdated文件
  18. [问题未处理]-kubernetes报错request canceled (Client.Timeout exceeded while awaiting headers)
  19. 使用Python的PyPD创建PDF文档
  20. oracle ora 3136,ALERT日志中常见监听错误:ORA-3136错误的排查

热门文章

  1. iOS宝藏App,让你的iPhone好用数倍不止
  2. Java可以做什么?
  3. 布隆过滤器(Bloom Filter)算法
  4. 东方财富全年净利翻番,一份区块链以外的业绩
  5. 我的世界基岩版种子和java版种子_我的世界基岩版村庄种子-恶地与冰刺之地|我的世界pe种子...
  6. Android ADB使用之详细篇
  7. 人机智能融合之哲学探析
  8. WIN10修改时间到2050年以后,出现屏幕闪烁资料搜索
  9. Ubuntu 20.04 更新源
  10. 1u水冷服务器如何维护,如何正确使用数据中心水冷技术?