最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

利用Python輕松實(shí)現(xiàn)找出同步日志中的重復(fù)數(shù)據(jù)

 更新時(shí)間:2026年01月07日 14:53:02   作者:VipSoft  
這篇文章主要為大家詳細(xì)介紹了如何利用Python輕松實(shí)現(xiàn)找出同步日志中的重復(fù)數(shù)據(jù),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

在做接口對接時(shí),對方提交過來的數(shù)據(jù)存在重復(fù)數(shù)據(jù),這時(shí)候可以通過 Python 輕松提取出來

syncDevice_2026-01-07.log

2026-01-07 11:41:33 | [{"deviceMac":"ED:0C:51:C2:B2:EA","deviceSn":"240103 P50162"},{"deviceMac":"C0:7A:A1:6C:67:AA","deviceSn":"221130P50012"},{"deviceMac":"D0:D0:02:39:83:D4","deviceSn":"221130P50012"}]
2026-01-07 11:41:33 | [{"deviceMac":"D0:D0:02:39:83:D4","deviceSn":"221130P50012"},{"deviceMac":"DC:8E:33:BA:3D:6D","deviceSn":"221130P50013"}]

Python 代碼如下:

import json
import re
from collections import defaultdict


def find_duplicate_devices_unique_mac(log_file_path):
    # 按 deviceSn 分組,每組內(nèi)用集合去重 deviceMac
    devices_by_sn = defaultdict(list)
    mac_seen_by_sn = defaultdict(set)  # 用于跟蹤每個(gè) SN 下已見過的 deviceMac

    # 讀取日志文件
    with open(log_file_path, 'r', encoding='utf-8') as file:
        for line_num, line in enumerate(file, 1):
            # 使用正則表達(dá)式提取 JSON 部分
            match = re.search(r'\[.*\]', line)
            if match:
                try:
                    # 解析 JSON 數(shù)組
                    devices = json.loads(match.group())

                    # 將每個(gè)設(shè)備添加到對應(yīng) deviceSn 的分組中,并去重 deviceMac
                    for device in devices:
                        device_sn = device.get('deviceSn')
                        device_mac = device.get('deviceMac')

                        if device_sn and device_mac:
                            # 如果這個(gè) SN 下還沒見過這個(gè) MAC,則添加
                            if device_mac not in mac_seen_by_sn[device_sn]:
                                devices_by_sn[device_sn].append(device)
                                mac_seen_by_sn[device_sn].add(device_mac)
                except json.JSONDecodeError as e:
                    print(f"第 {line_num} 行解析 JSON 時(shí)出錯(cuò): {e}")
                    continue

    # 找出重復(fù)的 deviceSn(去重 MAC 后仍然有多個(gè)記錄的)
    duplicate_devices = {}
    for device_sn, devices in devices_by_sn.items():
        if len(devices) > 1:
            duplicate_devices[device_sn] = devices

    return duplicate_devices


def print_duplicate_devices(duplicate_devices):
    if not duplicate_devices:
        print("沒有找到重復(fù)的 deviceSn")
        return

    print("找到以下重復(fù)的 deviceSn (已對 deviceMac 去重):\n")
    for device_sn, devices in duplicate_devices.items():
        print(f"deviceSn: {device_sn} (去重后出現(xiàn) {len(devices)} 次)")
        print("-" * 50)

        for i, device in enumerate(devices, 1):
            print(f"第 {i} 條記錄:")
            # 美化輸出 JSON
            print(json.dumps(device, indent=2, ensure_ascii=False))
            print()

        print("=" * 80)


# 版本2:更簡潔的實(shí)現(xiàn),直接輸出去重結(jié)果
def find_and_print_duplicates_unique(log_file):
    # 存儲(chǔ)去重后的設(shè)備
    unique_devices_by_sn = defaultdict(list)
    seen_mac_by_sn = defaultdict(set)

    with open(log_file, 'r') as f:
        for line in f:
            # 提取 JSON 數(shù)組部分
            json_match = re.search(r'\[.*\]', line)
            if json_match:
                try:
                    devices = json.loads(json_match.group())
                    for device in devices:
                        sn = device.get('deviceSn')
                        mac = device.get('deviceMac')

                        if sn and mac:
                            # 如果這個(gè) MAC 還沒在這個(gè) SN 組中出現(xiàn)過
                            if mac not in seen_mac_by_sn[sn]:
                                unique_devices_by_sn[sn].append(device)
                                seen_mac_by_sn[sn].add(mac)
                except:
                    continue

    # 找出并打印重復(fù)項(xiàng)
    print("重復(fù)的設(shè)備SN及其數(shù)據(jù) (已對deviceMac去重):")
    print("=" * 80)

    found_duplicates = False
    for sn, devices in unique_devices_by_sn.items():
        if len(devices) > 1:
            found_duplicates = True
            print(f"\n設(shè)備SN: {sn} (去重后出現(xiàn) {len(devices)} 次)")
            print("-" * 50)

            for i, device in enumerate(devices, 1):
                print(f"記錄 {i}:")
                # 格式化時(shí)間戳
                if 'productionDate' in device:
                    import datetime
                    timestamp = device['productionDate'] / 1000
                    dt = datetime.datetime.fromtimestamp(timestamp)
                    device['productionDate_formatted'] = dt.strftime('%Y-%m-%d %H:%M:%S')

                print(json.dumps(device, indent=2, ensure_ascii=False))
                print()

    if not found_duplicates:
        print("沒有找到重復(fù)的 deviceSn (或所有重復(fù)都是相同的 deviceMac)")


# 主程序
if __name__ == "__main__":
    log_file_path = "syncDevice_2026-01-07.log"

    try:
        print("=" * 80)
        print("方法1:詳細(xì)版")
        print("=" * 80)
        # 查找重復(fù)設(shè)備(去重 MAC)
        duplicate_devices = find_duplicate_devices_unique_mac(log_file_path)

        # 打印結(jié)果
        print_duplicate_devices(duplicate_devices)

        # 統(tǒng)計(jì)信息
        print("\n統(tǒng)計(jì)信息:")
        print(f"總共有 {len(duplicate_devices)} 個(gè)重復(fù)的 deviceSn")
        for device_sn, devices in duplicate_devices.items():
            print(f"  - {device_sn}: {len(devices)} 條不重復(fù)的記錄")

        print("\n" + "=" * 80)
        print("方法2:簡潔版")
        print("=" * 80)
        find_and_print_duplicates_unique(log_file_path)

    except FileNotFoundError:
        print(f"錯(cuò)誤: 找不到文件 {log_file_path}")
    except Exception as e:
        print(f"處理文件時(shí)出錯(cuò): {e}")

輸入結(jié)果:

================================================================================
方法1:詳細(xì)版
================================================================================
找到以下重復(fù)的 deviceSn (已對 deviceMac 去重):

deviceSn: 221130P50012 (去重后出現(xiàn) 2 次)
--------------------------------------------------
第 1 條記錄:
{
  "deviceMac": "C0:7A:A1:6C:67:AA",
  "deviceSn": "221130P50012"
}

第 2 條記錄:
{
  "deviceMac": "D0:D0:02:39:83:D4",
  "deviceSn": "221130P50012"
}

================================================================================

統(tǒng)計(jì)信息:
總共有 1 個(gè)重復(fù)的 deviceSn
  - 221130P50012: 2 條不重復(fù)的記錄

================================================================================
方法2:簡潔版
================================================================================
重復(fù)的設(shè)備SN及其數(shù)據(jù) (已對deviceMac去重):
================================================================================

設(shè)備SN: 221130P50012 (去重后出現(xiàn) 2 次)
--------------------------------------------------
記錄 1:
{
  "deviceMac": "C0:7A:A1:6C:67:AA",
  "deviceSn": "221130P50012"
}

記錄 2:
{
  "deviceMac": "D0:D0:02:39:83:D4",
  "deviceSn": "221130P50012"
}


Process finished with exit code 0

到此這篇關(guān)于利用Python輕松實(shí)現(xiàn)找出同步日志中的重復(fù)數(shù)據(jù)的文章就介紹到這了,更多相關(guān)Python查找同步日志中重復(fù)數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

洪湖市| 缙云县| 农安县| 金川县| 滦南县| 连江县| 大理市| 长武县| 肥西县| 池州市| 乌拉特后旗| 乌拉特前旗| 上饶市| 靖远县| 庆安县| 扎鲁特旗| 依安县| 伊春市| 松桃| 武义县| 鹤岗市| 富宁县| 济源市| 武乡县| 富源县| 赣榆县| 弥渡县| 大田县| 射洪县| 察雅县| 乾安县| 平昌县| 商都县| 临澧县| 孙吴县| 深圳市| 甘德县| 织金县| 女性| 江西省| 莱西市|