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 凛冽时雨》这首歌词的理解࿱…...
闲鱼AI客服终极指南:7×24小时自动化值守完整教程
闲鱼AI客服终极指南:724小时自动化值守完整教程 【免费下载链接】XianyuAutoAgent 智能闲鱼客服机器人系统:专为闲鱼平台打造的AI值守解决方案,实现闲鱼平台724小时自动化值守,支持多专家协同决策、智能议价和上下文感知对话。 …...
跨平台OpenCore配置管理工具:OCAT完整指南
跨平台OpenCore配置管理工具:OCAT完整指南 【免费下载链接】OCAuxiliaryTools Cross-platform GUI management tools for OpenCore(OCAT) 项目地址: https://gitcode.com/gh_mirrors/oc/OCAuxiliaryTools OpenCore Auxiliary Tools&am…...
协程生命周期调试困局破解(含Clang 18.1.0调试信息补丁实测数据)
第一章:协程生命周期调试困局的本质剖析协程的轻量性与异步调度能力在提升并发性能的同时,也悄然瓦解了传统线程调试范式的基础——确定的执行栈、可预测的挂起/恢复点、以及与操作系统线程强绑定的上下文。当开发者试图用 pprof 查看 goroutine 堆栈或在…...
如何通过Outfit字体打造专业级视觉体验?设计师必备指南
如何通过Outfit字体打造专业级视觉体验?设计师必备指南 【免费下载链接】Outfit-Fonts The most on-brand typeface 项目地址: https://gitcode.com/gh_mirrors/ou/Outfit-Fonts 在数字化设计领域,字体不仅是信息传递的载体,更是品牌个…...
高考数学97分,我的“数学直觉“比140分更好用:链表指针操作的代数思维:从离散数学看单链表
目录 一,序言 二,数学思维 三,核心概念 1. 节点(Node) 2. 头指针(Head Pointer) 3. 链式存储 4. 链表类型 5. 核心操作 6. 内存管理 7. 与顺序表的对比 数学思维: 8. 应用场景 四…...
Kazumi:3步打造你的专属动漫播放器,告别追番烦恼
Kazumi:3步打造你的专属动漫播放器,告别追番烦恼 【免费下载链接】Kazumi 基于自定义规则的番剧采集APP,支持流媒体在线观看,支持弹幕,支持实时超分辨率。 项目地址: https://gitcode.com/gh_mirrors/ka/Kazumi …...
开源项目WSA-Windows-10:让Windows 10焕发Android应用生态新活力
开源项目WSA-Windows-10:让Windows 10焕发Android应用生态新活力 【免费下载链接】WSA-Windows-10 This is a backport of Windows Subsystem for Android to Windows 10. 项目地址: https://gitcode.com/gh_mirrors/ws/WSA-Windows-10 在数字化办公与娱乐融…...
从树莓派到旧笔记本:利用Ubuntu 16.04 + CH340打造你的低成本硬件调试终端
从树莓派到旧笔记本:打造高性价比硬件调试终端的完整指南 在创客和硬件开发的世界里,调试工具的重要性不亚于开发板本身。想象一下:当你正在为一个物联网项目调试ESP32,或者为机器人项目编写Arduino代码时,一个稳定可靠…...
保姆级教程:用阿里云物联网平台给你的ESP32实现远程OTA升级(Arduino/PlatformIO通用)
ESP32远程OTA升级实战:基于阿里云物联网平台的完整解决方案 想象一下这样的场景:你开发的智能家居设备已经部署在用户家中,突然发现一个关键漏洞需要紧急修复。传统方式需要用户手动下载固件或返厂升级,而远程OTA(Ove…...
构建高效云点播系统(一):开源组件选型、安全防护与性能优化
1. 开源组件选型:从零搭建云点播系统的基石 第一次接触云点播系统时,我被各种开源组件的选择搞得晕头转向。经过几个项目的实战,我发现选对开源组件就像搭积木,基础打好了,后面的事情就水到渠成。这里分享几个我踩过坑…...
