python 两个表格字段列名称值,对比字段差异

支持xlsx,xls文件,相互对比字段列

输出两个表格文件相同字段,置底色为绿色

存在差异的不同字段,输出两个新的表格文件,差异字段,置底色为红色

注意点:读取的文件仅支持xlsx格式,头列需要删除空列及多余的字段值,确保对比的准确性

import pandas as pd
from openpyxl import load_workbook
from openpyxl.styles import PatternFill
import osdef convert_xls_to_xlsx(file):if file.endswith('.xls'):df = pd.read_excel(file, engine='xlrd')xlsx_file = file.replace('.xls', '.xlsx')df.to_excel(xlsx_file, index=False)return xlsx_filereturn filedef read_excel_file(file):if file.endswith('.xlsx') or file.endswith('.xls'):return pd.read_excel(file)else:raise ValueError("Unsupported file format: {}".format(file))def load_workbook_file(file):if file.endswith('.xlsx'):return load_workbook(file)elif file.endswith('.xls'):raise ValueError("openpyxl does not support .xls files directly. Convert to .xlsx first.")else:raise ValueError("Unsupported file format: {}".format(file))def compare_headers(file1, file2):# 检查文件是否存在if not os.path.exists(file1):print(f"文件 {file1} 不存在")returnif not os.path.exists(file2):print(f"文件 {file2} 不存在")return# 如果是 .xls 文件,先转换为 .xlsx 文件file1 = convert_xls_to_xlsx(file1)file2 = convert_xls_to_xlsx(file2)try:# 读取两个文件的数据df1 = read_excel_file(file1)df2 = read_excel_file(file2)except Exception as e:print(f"读取文件时出错: {e}")return# 获取两个文件的列名headers1 = df1.columns.tolist()headers2 = df2.columns.tolist()# 找出两个文件中列名相同和不同的列same_headers = [h for h in headers1 if h in headers2]diff_headers1 = [h for h in headers1 if h not in headers2]diff_headers2 = [h for h in headers2 if h not in headers1]# 设置填充颜色green_fill = PatternFill(fill_type='solid', fgColor='00FF00')red_fill = PatternFill(fill_type='solid', fgColor='FF0000')try:# 加载两个工作簿wb1 = load_workbook_file(file1)wb2 = load_workbook_file(file2)except Exception as e:print(f"加载工作簿时出错: {e}")return# 获取第一个工作表ws1 = wb1.activews2 = wb2.active# 遍历列,设置颜色for i, header in enumerate(headers1, start=1):if header in same_headers:ws1.cell(row=1, column=i).fill = green_fillelse:ws1.cell(row=1, column=i).fill = red_fillfor i, header in enumerate(headers2, start=1):if header in same_headers:ws2.cell(row=1, column=i).fill = green_fillelse:ws2.cell(row=1, column=i).fill = red_fill# 保存文件output_file1 = 'output1.xlsx'output_file2 = 'output2.xlsx'try:wb1.save(output_file1)wb2.save(output_file2)except Exception as e:print(f"保存文件时出错: {e}")return# 输出对比结果print('两表格文件对比后相同字段:', same_headers)print('表格文件1,存在差异字段:', diff_headers1)print('表格文件2,存在差异字段:', diff_headers2)# xlsx 和 xls 文件对比
compare_headers('file1.xls', 'file2.xls')

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/842056.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【AD21】Gerber文件的输出

Gerber文件是对接生产的文件,该文件包含了PCB的所有层的信息,如铜层、焊盘、丝印层、阻焊层等。板厂使用这些文件来准备生产工艺。虽然可以将PCB发给板厂去打板,但是对于公司而言,直接发PCB会有泄密风险,Gerber文件会相…

《宝贵的人生建议》

致读者 2024/05/25 发表想法 简练表达,发散(灵活)运用。 原文:在写作过程中,我的主要精力是用在这个方面:把这些重要的经验教训浓缩为尽可能紧凑简炼、易于传播的语言。我鼓励读者在阅读时扩展这些“种子”…

不能错过的AI知识学习神器「Mo卡片」

1. 「Mo卡片」——知识点的另一种承载方式 1.1 产品特点 📱一款专为渴望理解和掌握人工智能知识的小伙伴量身打造的轻量级 App。 🏷AI 知识卡片集 Mo卡片内置了 26 套卡片集,总计 1387 张卡片,每张卡片都能获得 1 个核心知识。…

GpuMall智算云:AUTOMATIC1111/stable-diffusion-webui/stable-diffusion-webui-v1.8.0

配置环境介绍 目前平台集成了 Stable Diffusion WebUI 的官方镜像,该镜像中整合如下资源: GpuMall智算云 | 省钱、好用、弹性。租GPU就上GpuMall,面向AI开发者的GPU云平台 Stable Diffusion WebUI版本:v1.8.0 Python版本:3.10.…

nginx与nginx-rtmp-module安装

nginx与nginx-rtmp-module安装 画了好几天图,实在有些乏力,找点有意思的事情做做 觉得视频流传输挺有意思,B站找了些视频,但感觉有些大同小异,讲得不是很清楚 FFmpeg/RTMP/webRTC丨90分钟搞定直播逻辑-推流-流媒体服…

半年不在csdn写博客,总结一下这半年的学习经历,coderfun的一些碎碎念.

前言 自从自己建站一来,就不在csdn写博客了,但是后来自己的网站因为资金问题不能继续维护下去,所以便放弃了自建博客网站来写博客,等到以后找到稳定,打算满意的工作再来做自己的博客网站。此篇博客用来记录自己在csdn…

如何使用Go语言编写RESTful API?

在当今的软件开发中,RESTful API的使用变得日益重要。它们提供了跨平台、跨语言的通信方式,使得不同的服务能够无缝地集成在一起。Go语言作为一种高效且简洁的编程语言,非常适合用于编写RESTful API。本文将向你展示如何使用Go语言编写RESTfu…

Git Large File Storage (LFS) 的安装与使用

Git Large File Storage [LFS] 的安装与使用 1. An open source Git extension for versioning large files2. Installing on Linux using packagecloud3. Getting Started4. Error: Failed to call git rev-parse --git-dir: exit status 128References 1. An open source Git…

HLS流在部分安卓机型无法播放问题的排查

问题描述 最近上线了一个数字人系统,客户端通过HLS实时拉流进行播放来提升用户体验(视频推理后再进行播放的延时不可接受)。通过一段时间的使用,反馈有部分Android机型无法正常播放视频。 问题排查 因为上线之前做过测试,在VLC播放器, iOS…

Android Studio 获取 SHA1

以 debug.keystore 调试密钥库为例。 步骤1:明确 debug.keystore 位置 debug.keystore 在 .android 目录下: Windows 用户:C:\Users\用户名\.android\debug.keystore Mac 用户:/Users/用户名/.android/debug.keystore 假设我的…

【云原生】用 Helm 来简化 K8s 应用管理

用 Helm 来简化 K8s 应用管理 1.诞生背景2.主要功能3.相关概念4.工作原理5.架构演变6.Helm 常用命令7.推荐仓库8.Charts8.1 目录结构8.2 构建一个无状态应用模版 charts Helm 对于 Kubernetes 来说就相当于 Yum 对于 Centos 来说,如果没有 Yum 的话,我们…

旅游推荐管理系统

代码位置:旅游管理系统: 根据若依模版的一个旅游管理系统 - Gitee.com 分支dev 项目介绍 项目目的 随着社会的高速发展,人们生活水平的不断提高,以及工作节奏的加快,旅游逐渐成为一个热门的话题,因为其形式的多样,涉…

html中元素显示模式

一:元素显示模式是什么 元素显示模式指元素在文件中以什么样的方式显示 二:具体分类及作用 1 块元素 块元素的特征: 独占一行可以设置宽、高、内外边距宽度默认为容器(父级盒子)的100%块元素是一个容器或盒子,可以放其他块元素或行内元素注意事项: 常见的块级元素<…

linux经典定时任务

在使用时记得替换为自己的脚本路径。请在相应的脚本第一行加上#!/bin/bash&#xff0c;否则脚本在定时任务中无法执行。 1、在每天凌晨2点执行 0 2 * * * /bin/sh bashup.sh 2、每天执行两次 下面的示例命令将在每天上午5点和下午5点执行。您可以通过逗号分隔指定多个时间戳…

IO多路复用模型原理

在linux没有实现epoll事件驱动机制之前,常规的手段是选择select和poll等IO多路复用的方法来实现并发服务程序。但是在大数据、高并发、集群情况下,select和poll的性能瓶颈就出现了,于是epoll就诞生了 Select select函数监视的文件描述符分三类:writefds、readfds和exceptf…

日历管理软件:桌面日历保姆级安装

一、简介 1、日常管理是当代社会人常用的工具或者是说经常遗漏的工具&#xff0c;今天我推荐的这个软件&#xff0c;相信会让你一见衷心&#xff1a;桌面日历 通常用于记录时间、日期和重要事件。它可以是传统的纸质日历&#xff0c;也可以是电子版的桌面应用程序&#xff0c…

电脑录屏功能全攻略,这3个方法让你轻松掌握

现如今&#xff0c;电脑录屏功能已成为我们日常工作和学习的得力助手。无论是演示软件操作、记录会议内容&#xff0c;还是制作教学视频&#xff0c;电脑录屏都能帮助我们轻松捕捉屏幕上的每一帧画面。本文将详细介绍三种常用的电脑录屏方法&#xff0c;帮助您快速掌握录屏技巧…

Java涉及的运算符

Java涉及的运算符有以下几种&#xff1a; 算术运算符&#xff1a;用于进行基本的数学运算&#xff0c;包括加法&#xff08;&#xff09;、减法&#xff08;-&#xff09;、乘法&#xff08;*&#xff09;、除法&#xff08;/&#xff09;、取余&#xff08;%&#xff09;等。 …

C++_右值引用和移动语义的学习

1. 左值引用和右值引用 在C11之前出现的引用都是左值引用&#xff0c;右值引用是C11新增的。但是无论左值引用还是右值引用&#xff0c;都是给对象取别名。 1.1 左值 左值是一个表示数据的表达式(如变量名或解引用的指针)&#xff0c;我们可以获取它的地址可以对它赋值&#x…