🔍 ComparativeData

一、🚀ComparativeData 简介

        ComparativeData 是一个基于 Python 开发的轻量级数据对比工具,专为开发者和数据分析师设计。它能够智能比较字符串、列表、字典等多种数据类型,并以直观的方式展示差异,是代码调试、数据校验的得力助手。

✨ 核心功能

功能方法 适用数据类型 技术实现 输出形式
compar_str() 字符串 difflib.Differ 行内差异标记
compar_list() 列表 DeepDiff 结构化差异报告
compar_dict() 字典 DeepDiff 键值差异详情

二、🛠️ 技术实现解析

2.1、 字符串对比(行级差异分析)

@staticmethod
def compar_str(str1, str2):
    """智能比对两个字符串的差异"""
    differ = difflib.Differ()
    diff = list(differ.compare(str1.split(), str2.split()))
    print("\n".join(diff))  # 可视化输出差异

        技术亮点:
        - 使用 Python 标准库 difflib
        - 自动分割字符串进行词级比对
        - 输出带标记的差异结果(+、-、?)

2.2、 列表/字典对比(结构化差异检测)

@staticmethod
def compar_dict(dict1, dict2):
    """深度比对字典结构差异"""
    diff = DeepDiff(dict1, dict2)
    print(diff)  # 输出完整差异报告

        技术亮点:
        - 基于 DeepDiff 进行递归深度比较
        - 自动识别类型变化、值变化、结构变化
        - 支持嵌套数据结构比对

2.3、 完整代码

#!/usr/bin/python
# -*- coding: utf-8 -*-
# @Users: LiMu
# @Files:comparative_data.py
# @Times: 2025/6/26 
# @Software:PyCharm

import os
import json
import time
import random
import difflib
from deepdiff import DeepDiff

class ComparativeData:
    @staticmethod
    def compar_str(str1,str2):
        """
        :compar_str:比较字符串
        :param str1: 字符串1
        :param str2: 字符串2
        :return: 无返回
        """
        differ = difflib.Differ()
        diff = list(differ.compare(str1.split(), str2.split()))
        print("\n".join(diff))  # 输出差异对比

    @staticmethod
    def compar_list(list1,list2):
        """
        :compar_list:比较列表
        :param list1: 列表1
        :param list2: 列表2
        :return: 无返回
        """
        diff = DeepDiff(list1, list2)
        print(diff)

    @staticmethod
    def compar_dict(dict1,dict2):
        """
        :compar_dict:比较字典
        :param dict1: 字典1
        :param dict2: 字典2
        :return: 无返回
        """
        diff = DeepDiff(dict1, dict2)
        print(diff)


if __name__ == '__main__':
    str1,str2 = "66a6","66b6"
    list1,list2 = ["a","b"],["a","c"]
    dict1,dict2 = {"a":1,"b":2,"c":4},{"a":1,"b":3,"d":4}

    ComparativeData.compar_str(str1,str2)
    ComparativeData.compar_list(list1,list2)
    ComparativeData.compar_dict(dict1,dict2)

三、🌟 使用场景案例

案例1:接口测试验证
# 比对预期响应和实际响应
expected = {"code": 200, "data": [...]}
actual = requests.get(api_url).json()
ComparativeData.compar_dict(expected, actual)
案例2:配置文件变更审计
# 比较新旧版本配置
with open('config_v1.json') as f1, open('config_v2.json') as f2:
    old_conf = json.load(f1)
    new_conf = json.load(f2)
ComparativeData.compar_dict(old_conf, new_conf)

四、📌 使用建议

可在原来的基础上增加文件对比功能
@staticmethod
def compar_file(file1_path, file2_path, output_diff=False):
    """
    比对两个文本文件的差异
    :param file1_path: 文件1路径
    :param file2_path: 文件2路径
    :param output_diff: 是否输出到文件
    :return: 差异内容/文件路径
    """
    with open(file1_path) as f1, open(file2_path) as f2:
        lines1 = f1.readlines()
        lines2 = f2.readlines()
    
    diff = difflib.unified_diff(
        lines1, lines2,
        fromfile=file1_path,
        tofile=file2_path,
        lineterm='')
    
    result = '\n'.join(diff)
    
    if output_diff:
        diff_path = f"diff_{int(time.time())}.patch"
        with open(diff_path, 'w') as f:
            f.write(result)
        return diff_path
    return result
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容