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 凛冽时雨》这首歌词的理解࿱…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...

关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...

前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...