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

news2024/12/23 20:30:45

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

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

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

import pandas as pd
from openpyxl import load_workbook
from openpyxl.styles import PatternFill
import os


def 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_file
    return file


def 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} 不存在")
        return
    if 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.active
    ws2 = wb2.active

    # 遍历列,设置颜色
    for i, header in enumerate(headers1, start=1):
        if header in same_headers:
            ws1.cell(row=1, column=i).fill = green_fill
        else:
            ws1.cell(row=1, column=i).fill = red_fill

    for i, header in enumerate(headers2, start=1):
        if header in same_headers:
            ws2.cell(row=1, column=i).fill = green_fill
        else:
            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.coloradmin.cn/o/1700630.html

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

相关文章

简单易懂的 API 集成测试方法

简介:API 集成测试的重要性 API 集成测试是一类测试活动,用于验证 API 是否满足功能性、可靠性、性能和安全性等方面的预期要求。在多 API 协作的应用程序中,这种测试尤为紧要。 在这一阶段,我们不仅审视单个组件,还…

比例溢流阀的放大器找BEUEC

液压比例放大器的使用范围广泛,包括工业生产线、船舶液压系统等多个领域。BEUEC比例放大器是一种重要的液压系统组件,其作用是将微弱的液压信号放大,以实现对液压系统的精确控制。这种设备在多个行业中都有广泛的应用,特别是在需要…

可视化大屏开发,知道了这些经验以及解决方案,效率至少提升2倍!(完结篇)

大家好,我是日拱一卒的攻城师不浪,专注可视化、数字孪生、前端、nodejs、AI学习、GIS等学习沉淀,这是2024年输出的第16/100篇文章; 前言 之前写了两篇可视化大屏开发的经验总结,小伙伴们反应还不错。 最近&#xff0…

响应式UI组件DevExtreme中文教程 - 工具栏的自适应模式

DevExtreme拥有高性能的HTML5 / JavaScript小部件集合,使您可以利用现代Web开发堆栈(包括React,Angular,ASP.NET Core,jQuery,Knockout等)构建交互式的Web应用程序。从Angular和Reac&#xff0c…

浅谈JMeter环境变量设置

JMeter环境变量设置 确保已安装Java Development Kit (JDK) JMeter需要Java运行环境,因此请先安装JDK,并确认JAVA_HOME环境变量已经设置好。可以通过命令提示符输入java -version和javac -version来验证是否安装成功及其版本信息,若没有出现…

阿里云 EMR Serverless Spark 版开启免费公测

阿里云 EMR Serverless Spark 版是一款云原生,专为大规模数据处理和分析而设计的全托管 Serverless 产品。它为企业提供了一站式的数据平台服务,包括任务开发、调试、调度和运维等,极大地简化了数据处理的全生命周期工作流程。使用 EMR Serve…

气膜建筑:室内滑雪场的理想选择—轻空间

近年来,室内滑雪场成为越来越多投资者关注的热门项目。随着滑雪运动的普及,滑雪场的生意也愈加红火。对于投资者来说,选择一种省钱又实惠的搭建方案至关重要,而气膜建筑无疑是一个理想的选择。以下将详细介绍气膜建筑在室内滑雪场…

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《考虑分布式光伏高效消纳与负荷损失最小的区域配电网应急资源协同配置策略》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

域提权漏洞系列分析-Zerologon漏洞分析

2020年08⽉11⽇,Windows官⽅发布了 NetLogon 特权提升漏洞的⻛险通告,该漏洞编号为CVE-2020-1472,漏 洞等级:严重,漏洞评分:10分,该漏洞也称为“Zerologon”,2020年9⽉11⽇&#xff…

Tomcat源码解析(七):底层如何获取请求url、请求头、json数据?

Tomcat源码系列文章 Tomcat源码解析(一):Tomcat整体架构 Tomcat源码解析(二):Bootstrap和Catalina Tomcat源码解析(三):LifeCycle生命周期管理 Tomcat源码解析(四):StandardServer和StandardService Tomcat源码解析(五)&…

Python使用virtualenv创建虚拟环境

目录 第一步:安装virtualenv 第二步:选择一个文件夹用来放所创建的虚拟环境 第三步:创建虚拟环境 第四步:激活虚拟环境 第五步:退出虚拟环境 第六步:测试安装django 前提:你得有个python环…

价格预言机领导者 Pyth 与 Eclipse 平台集成,为高频 DeFi 应用提供支持

本篇文章将对这一战略合作伙伴关系,以及 Pyth 网络在 Eclipse 生态系统中扮演的关键角色进行深入探讨。 目前,Pyth 价格数据已正式上线于 Eclipse 测试网。Eclipse 是首个结合了以太坊安全性、Solana 性能和 Celestia DA 的 Solana虚拟机(SVM) Layer2 方…

喜讯!宝兰德斩获2024数字中国创新大赛·信创赛道全国总决赛三等奖

5月24日,由国家发展和改革委员会、国家数据局、国家互联网信息办公室、科学技术部、国务院国有资产监督管理委员会和福建省人民政府共同主办的2024数字中国创新大赛信创赛道全国总决赛颁奖典礼暨闭幕式大会在福州海峡国际会展中心圆满落幕。依托专业技术研发能力及丰…

【网络安全】勒索软件ShrinkLocker使用 windows系统安全工具BitLocker实施攻击

文章目录 威胁无不不在BitLocker 概述如何利用BitLocker进行攻击如何降低影响Win11 24H2 装机默认开启 BitLocker推荐阅读 威胁无不不在 网络攻击的形式不断发展,即便是合法的 Windows 安全功能也会成为黑客的攻击工具。 卡巴斯基实验室专家 发现 使用BitLocker的…

路径规划 | 图解粒子群(PSO)算法(附ROS C++仿真)

目录 0 专栏介绍1 从鸟群迁徙说起2 粒子群算法基本概念3 粒子群算法流程4 粒子群算法ROS实现 0 专栏介绍 🔥附C/Python/Matlab全套代码🔥课程设计、毕业设计、创新竞赛必备!详细介绍全局规划(图搜索、采样法、智能算法等);局部规…

使用 Ollama框架 下载和使用 Llama3 AI大模型的完整指南

🏡作者主页:点击! 🤖AI大模型部署与应用专栏:点击! ⏰️创作时间:2024年5月24日20点59分 🀄️文章质量:96分 目录 💥Ollama介绍 主要特点 主要优点 应…

Android14之Binder调试(二百一十一)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

【论文笔记】advPattern

【论文题目】 advPattern: Physical-World Attacks on Deep Person Re-Identification via Adversarially Transformable Patterns Abstract 本文首次尝试对深度reID实施鲁棒的物理世界攻击。提出了一种新颖的攻击算法,称为advPattern,用于在衣服上生成…

java “错误:编码GBK 的不可映射字符”

环境:JDK-17 本机编码:utf-8 代码编码:GBK 错误:java “错误:编码GBK 的不可映射字符” 解决1:记事本打开java源文件,另存为选择ANSI编码 解决2:复制代码再将编码格式改为utf-8,…

STM32无源蜂鸣器播放音乐

开发板:野火霸天虎V2 单片机:STM32F407ZGT6 开发软件:MDKSTM32CubeMX 文章目录 前言一、找一篇音乐的简谱二、确定音调三、确定节拍四、使用STM32CubeMX生成初始化代码五、代码分析 前言 本实验使用的是低电平触发的无源蜂鸣器 无源蜂鸣器是…