Python对Excel文件多表对多表之间的匹配(两种不同表头)——之json版
首先Excel文件多表对多表之间的匹配(VLOOKUP),有多种办法,
1:将Excel文件导入Mysql或其他数据库,然后将两种表合并成一张表,接着用数据库匹配
2:将两种表内容,复制粘贴到一起,各自分别保存成一张表,然后VLOOUP,这是最普通的做法
3:将想要匹配的多张表的匹配项做成json文件,然后合并多个json文件,接着用想要匹配的表依次去匹配合并后的json,这样有个好处,就是速度快,而且是每个单独分开的
我今天分享的是第三种方法,下面我用小例子,来说明一下我的需求:
首先我有三张虚拟表,表头如下,其中字段:【证件号】,是空的,它的值是通过姓名(假设姓名是为一项),去另外3张表里去匹配,当然可能匹配不到
下面是原始表(我工作中遇到的是30张表!!!)

下面三张是想要匹配的表(我工作中遇到的实际情况是30多张表,每张表90多万行🤣)

所以到这里,我的需求已经显而易见了,这里的表数据量都是比较少的,实际情况上面也讲了,数据量非常庞大,那么如何解决呢,我分成了4步
第 1 步
先将所有数据转换成csv格式

代码
import os
import time
import pandas as pd # 导入pands库
def xlsx2csv():# 读取xlsx数据t1 = time.time()for f in os.listdir("原始表/"):data = pd.read_excel("原始表/" + f, index_col=0) # 设置index_col=0,写入文件时第一列不会存在序列号data.to_csv("csv版" + f + '.csv', encoding='utf-8') # 将数据写入csv文件print("写入完成......")t2 = time.time()print(t2 - t1)
xlsx2csv()
第2 步
将匹配项转为json文件
下面这行代码是准备做字典,元组中的第一个参数是键,第二参数是值(可以拼接写法,如d[1]+d[2],或这用符号隔开方便切割,如d[1]+‘-’+d[2])
list_a.append((d[0], d[0])) 1其实我这个代码是可以包含重复的键的,如若包含重复的键,它会把多个值放在列表里
具体的大家可以查看这篇文章:python一键多值
下面视频中我的值的索引写错了,大家忽略,后来我改了,但是视频已经录好了看🤣

代码
import csv
import os
from collections import defaultdict
def write_json():for f in os.listdir("./csv版/"):with open("./csv版/" + f, newline='', encoding='utf-8') as csvfile:# 读取 CSV 文件内容reader = csv.reader(csvfile, delimiter=',', quotechar='"')# 遍历 CSV 文件中的每一行数据print(f, "加载完毕")list_a = [] # 列表用来存放 (A列,B列) 的元组,所有的数据for d in reader:# 处理每一行数据# print(d)list_a.append((d[0], d[0])) # 这个就不翻译了吧,添加数据d = defaultdict(list) # 创建字典for key, value in list_a:d[key].append(value) # 省去了if判断语句,添加字典with open(f"./json文件/{f.split('.')[0]}.json", "w", encoding="utf-8") as f2:f2.write(json.dumps(d, ensure_ascii=False)) # 写入json,防止乱码write_json()
第 3步
合并上一步的json文件。

代码
import json
import os
def merge_json():# 定义要合并的json文件路径# 定义合并后的json文件路径# 定义一个空的字典,用于存储合并后的json数据merged_data = {}# 遍历所有的json文件,将数据合并到merged_data中for file in os.listdir("./json文件/", ):with open("./json文件/" + file, 'r', encoding="utf-8") as f:data = json.load(f)merged_data.update(data)print(file)# 将合并后的json数据写入到merged_file中with open("合并json/mergr.json", 'w', encoding="utf-8") as f:json.dump(merged_data, f, ensure_ascii=False) # 防止中文乱码print("合并成功!")merge_json()
第 4 步,最后一步啦!!
1、 把第一步的转换成功的csv文件,放入文件夹【数据源】准备读取
2、加载刚刚合并后的json文件
3、开始匹配
4、保存


奉上完整版代码
'''作者:一晌小贪欢
手机:xxxx
'''# xlsx文件转csv文件
import csv
import json
import os
import time
from collections import defaultdict
import pandas as pd # 导入pands库def xlsx2csv():# 读取xlsx数据t1 = time.time()for f in os.listdir("原始表/"):data = pd.read_excel("原始表/" + f, index_col=0) # 设置index_col=0,写入文件时第一列不会存在序列号data.to_csv("csv版" + f + '.csv', encoding='utf-8') # 将数据写入csv文件print("写入完成......")t2 = time.time()print(t2 - t1)
xlsx2csv()def write_json():for f in os.listdir("./csv版/"):with open("./csv版/" + f, newline='', encoding='utf-8') as csvfile:# 读取 CSV 文件内容reader = csv.reader(csvfile, delimiter=',', quotechar='"')# 遍历 CSV 文件中的每一行数据print(f, "加载完毕")list_a = [] # 列表用来存放 (A列,B列) 的元组,所有的数据for d in reader:# 处理每一行数据# print(d)list_a.append((d[0], d[1])) # 这个就不翻译了吧,添加数据d = defaultdict(list) # 创建字典for key, value in list_a:d[key].append(value) # 省去了if判断语句,添加字典with open(f"./json文件/{f.split('.')[0]}.json", "w", encoding="utf-8") as f2:f2.write(json.dumps(d, ensure_ascii=False)) # 写入json,防止乱码write_json()def merge_json():# 定义要合并的json文件路径# 定义合并后的json文件路径# 定义一个空的字典,用于存储合并后的json数据merged_data = {}# 遍历所有的json文件,将数据合并到merged_data中for file in os.listdir("./json文件/", ):with open("./json文件/" + file, 'r', encoding="utf-8") as f:data = json.load(f)merged_data.update(data)print(file)# 将合并后的json数据写入到merged_file中with open("合并json/mergr.json", 'w', encoding="utf-8") as f:json.dump(merged_data, f, ensure_ascii=False) # 防止中文乱码print("合并成功!")merge_json()def main():t1 = time.time()with open("合并json/mergr.json", "r", encoding="utf-8") as f:res = json.load(f)t2 = time.time()print(t2 - t1)for f_n in os.listdir("./数据源/"):with open("./结果/" + f_n, "w", newline='', encoding="utf-8") as f1:f1 = csv.writer(f1)f1.writerow(['姓名','地址','电话','电子邮件','出生日期','公司','职位','信用卡号码','IBAN','IP地址','证件号'])with open("./数据源/" + f_n, newline='', encoding='utf-8') as csvfile:# 读取 CSV 文件内容reader = csv.reader(csvfile, delimiter=',', quotechar='"')# 遍历 CSV 文件中的每一行数据print(f_n, "加载完毕")count = 0for d in reader:count+=1if count == 1:continueid_ = res.get(d[0], '-')if id_ != '-':id_ = id_[0]d[-1] = id_f1.writerow(d)main()
这个就是今天分享的小工具,希望对整天面对账单、报表的财务们有所帮助!!
致力于办公自动化的小小程序员一枚#
都看到这了,关注+点赞+收藏=不迷路!!
如果你想知道更多关于Python办公自动化的知识各位大佬给个关注吧!
相关文章:
Python对Excel文件多表对多表之间的匹配(两种不同表头)——之json版
首先Excel文件多表对多表之间的匹配(VLOOKUP),有多种办法, 1:将Excel文件导入Mysql或其他数据库,然后将两种表合并成一张表,接着用数据库匹配 2:将两种表内容,复制粘贴到一起,各自分别保存成一张表…...
shiro环境搭建
源码部署 这种方法相对复杂,如果不需要分析源码直接用docker就行 前置条件:Maven Ideal Tomcat 下载方式1:https://codeload.github.com/apache/shiro/zip/shiro-root-1.2.4,然后将文件夹导入ideal下载方式2:将shiro…...
一文读懂selenium自动化测试(基于Python)
前言 我们今天来聊聊selenium自动化测试,我们都知道selenium是一款web自动化测试的工具,它应该如何去运用呢?我们接着看下去。 1、Selenium简介: 1.1 Selenium: Selenium是一款主要用于Web应用程序自动化测试的工具集合。Sele…...
如何高效地在网上找开源项目
开源项目是发展技能、分享想法和成为开发社区一员的好方法。开源意味着软件功能背后的源代码与所有想要阅读它的人公开共享。这意味着你可以准确地看到一个系统是如何工作的——一旦你愿意冒险,就为它做出贡献。除了向所有人开放贡献外,这种开放代码库通…...
2023系统分析师---冲刺资料必备知识点三
视图的优点: 视图能简化用户的操作;视图机制可以使用户以不同的方式查询同一数据;视图对数据库重构提供了一定程度的逻辑独立性;视图可以对机密的数据提供安全保护; ER图、实体、联系、联系的类型: 分布…...
集成Bean Validation 1.1(JSR-349)到 SpringMVC
Spring4新特性——集成Bean Validation 1.1(JSR-349)到 SpringMVC Bean Validation 1.1当前实现是Hibernate validator 5,且spring4才支持。接下来我们从以下几个方法 讲解Bean Validation 1.1,当然不一定是新特性: 1. 集成Bean Valida…...
【软考中级】软件设计师选择题题集(一)
海明校验码是在n个数据位之外增设k个校验位,从而形成一个k+n位的新的码字, 使新的码字的码距比较均匀地拉大。n与k的关系是(1)。 (1)A.2k - 1≥n + k B.2n - 1≤ n + k C.n = k D.n-1≤k 【答案】A 【解析】 【答案】B A 【解析】 在采用结构化方法进行系统分析时,…...
10个炫酷特效的网页写法(附源码),拿去就能用,奈斯奈斯
这是我借鉴其他博主的,给网页加个背景,给鼠标加个特效,“使用简单”,“效果爆炸”的页面,分享给大家,如果觉得有帮助可以点赞收藏支持一下,如果能关注一下就再好不过了。 内容转载于https://bl…...
vscode开发stm32的编译环境配置教程
文章目录 1. 背景2. 配置步骤2.1. vscode插件安装2.2. 新建工程2.3. 配置编译环境2.3.1. 芯片支持2.3.2. 编译器选择2.3.3. CPU类型2.3.4. 硬件浮点选项2.3.5. 使用自定义的链接脚本2.3.6. RAM/FLASH布局2.3.7. 构建器选项2.4. 编译3. 问题汇总3.1. 浮点编译开关3.2. MicroLIB编…...
Live800在线客服系统:客户体验即是业绩来源
“客户就是上帝”,这一论断在商业行为中早已成为不争的事实。 所有企业都知道,满足客户的需求才能让企业稳步发展。在产品同质化严重的今天,客户服务成为核心竞争力,试想一下,在产品、价格相差无几的两个企业中&#…...
SAP工具箱 MR22自定义BAPI
点击蓝字 关注我们 一 前言 标准事务代码MR22 通过调整金额影响物料的成本价,前台界面中单个凭证中允许输入多行物料, 但是对应的BAPI函数仅支持输入单行物料 BAPI_MATVAL_DEBIT_CREDIT 正常库存BAPI_SALESORDSTCK_DEBIT_CREDIT 销售订单库存 这种情况 婶可忍叔不可忍 (感谢用户…...
ASP.NET 网上选课系统的设计与实现(源代码+论文)
随着教育改革的不断深化,建立一套能够适应这些改变的行政管理方案也就显得尤为重要。在高等院校的日常工作中,每个学期都要面临学生的选课工作。以往在选课工作的各个阶段都是手工操作,不但效率低下、工作繁琐,而且容易出错,于是开发一套适合校情的网上选课系统便成为了教…...
SpringMVC学习总结(路由映射、参数传递、转发和重定向...)
目录 1. MVC简介 2. SpringMVC简介 3. 路由映射注解 3.1 RequestMapping 3.2 GetMapping与PostMapping 4. 接收前端传递参数 4.1 接收单/多个参数 4.2 接收对象 4.3 接收JSON对象 4.4 后端参数重命名/映射 4.5 设置参数必传/非必传 4.6 获取URL中的参数 4.7 获取文…...
基于MAC地址的ACL配置
基于MAC地址的ACL配置 【实验目的】 掌握基于MAC地址的标准ACL的配置。验证配置。 【实验拓扑】 实验拓扑如图1所示。 图1 实验拓扑 设备参数如表所示。 表1 设备参数表 设备 接口 IP地址 子网掩码 默认网关 S1 e0/0 N/A N/A N/A e0/1 N/A N/A N/A PC1 N/…...
软件设计师 计算机网络
名字带IP AP的都是网络层 所有带T的除了TFTP其他都是TCP,所有不带T的除了POP3其他都是UDP **物理层的互联设备有中继器和集线器,集线器是一种特殊的多路多端口中继器 网络层:路由器 物理层:中继器 数据链路层:网桥…...
Gradle ——Gradle安装与配置
目录 一、简介 二、功能和特点 三、安装 参考: Gradle_百度百科 Gradle 学习 ----Gradle 入门_你若不离不弃,我必生死相依的博客-CSDN博客 还有硬石科技的开源wifiAPP程序,没找到他们的码仓 一、简介 Gradle是一个基于Apache Ant和Apache Maven概念…...
网络安全这条路到底该怎么走?
我之前就写过一篇文章专门解答了这个问题。但是还是有很多小伙伴并不清楚这条路该怎么走下去! 不同于Java、C/C等后端开发岗位有非常明晰的学习路线,网路安全更多是靠自己摸索,要学的东西又杂又多,难成体系。 网络安全虽然是计算…...
【C++】位图(海量数据处理)
文章目录 抛出问题:引入位图位图解决 位图的概念位图的实现结构构造函数设置位清空位判断这个数是否存在反转位size与count打印函数 位图的应用 抛出问题:引入位图 问题:给40亿个不重复的无符号整数,没排序,给一个无符号整数,如何…...
外包干了五年,废了...
先说一下自己的情况。大专生,17年通过校招进入湖南某软件公司,干了接近5年的测试点点点,今年年上旬,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了五年的点工…...
请问你如何理解以下的歌词“unravel - TK from 凛冽时雨 (TK from 凛として時雨)为什么很多人说崖山海战以后无中国
目录 请问你如何理解以下的歌词“unravel - TK from 凛冽时雨 (TK from 凛として時雨) 为什么很多人说崖山海战以后无中国 请问你如何理解以下的歌词“unravel - TK from 凛冽时雨 (TK from 凛として時雨) 以下是我对《unravel - TK from 凛冽时雨》这首歌词的理解࿱…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
Spring Boot 实现流式响应(兼容 2.7.x)
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...
UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
认识CMake并使用CMake构建自己的第一个项目
1.CMake的作用和优势 跨平台支持:CMake支持多种操作系统和编译器,使用同一份构建配置可以在不同的环境中使用 简化配置:通过CMakeLists.txt文件,用户可以定义项目结构、依赖项、编译选项等,无需手动编写复杂的构建脚本…...
python打卡第47天
昨天代码中注意力热图的部分顺移至今天 知识点回顾: 热力图 作业:对比不同卷积层热图可视化的结果 def visualize_attention_map(model, test_loader, device, class_names, num_samples3):"""可视化模型的注意力热力图,展示模…...
raid存储技术
1. 存储技术概念 数据存储架构是对数据存储方式、存储设备及相关组件的组织和规划,涵盖存储系统的布局、数据存储策略等,它明确数据如何存储、管理与访问,为数据的安全、高效使用提供支撑。 由计算机中一组存储设备、控制部件和管理信息调度的…...
工厂方法模式和抽象工厂方法模式的battle
1.案例直接上手 在这个案例里面,我们会实现这个普通的工厂方法,并且对比这个普通工厂方法和我们直接创建对象的差别在哪里,为什么需要一个工厂: 下面的这个是我们的这个案例里面涉及到的接口和对应的实现类: 两个发…...
中科院1区顶刊|IF14+:多组学MR联合单细胞时空分析,锁定心血管代谢疾病的免疫治疗新靶点
中科院1区顶刊|IF14:多组学MR联合单细胞时空分析,锁定心血管代谢疾病的免疫治疗新靶点 当下,免疫与代谢性疾病的关联研究已成为生命科学领域的前沿热点。随着研究的深入,我们愈发清晰地认识到免疫系统与代谢系统之间存在着极为复…...
