You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python从JSON日志文件中提取唯一remoteIp地址列表

Python从JSON日志提取唯一remoteIp地址列表实现方案

核心实现思路

Python内置的set(集合)类型天然不允许存储重复元素,是做值去重最简单的方案,无需安装第三方依赖,适合初学者使用。你原有代码只做了IP提取打印,没有做去重存储,因此无法得到唯一IP列表。

修正后完整代码

保留你原有字段清理、新JSON文件导出的逻辑,仅增加集合去重部分:

import json

# 初始化空集合用于存储去重后的IP
unique_ips = set()

with open("automation.json", "r", encoding="utf-8") as f:
    log_data = json.load(f)
    for log in log_data:
        # 原有字段清理逻辑
        del log['resource'], log['timestamp'], log['severity'], log['logName'], log['trace'], log['spanId'], \
            log['receiveTimestamp'], log['jsonPayload']['statusDetails'], log['jsonPayload']['@type'], log['insertId'], \
            log['jsonPayload']['enforcedSecurityPolicy']['name'], log['httpRequest']['latency']
        
        # 提取当前日志的客户端IP,加入去重集合
        remote_ip = log['httpRequest']['remoteIp']
        unique_ips.add(remote_ip)

# 原有清理后日志导出逻辑
with open('automation_new.json', 'w', encoding="utf-8") as f:
    json.dump(log_data, f, indent=2)

# 集合转列表,得到最终的唯一IP列表
unique_ip_list = list(unique_ips)

# 打印结果验证
print("唯一客户端IP列表:")
for ip in unique_ip_list:
    print(ip)

补充说明

  • 如果你需要同时统计每个IP的出现次数,可以把存储结构换成字典,遍历的时候做计数即可,示例逻辑:
    ip_counter = {}
    # 遍历日志时执行
    ip_counter[remote_ip] = ip_counter.get(remote_ip, 0) + 1
    
  • 用with open()上下文管理器读写文件时,会自动完成文件关闭操作,不需要额外手动调用file.close(),你原有代码末尾的关闭语句属于冗余写法。
  • 读写文件时建议显式指定encoding="utf-8",避免Windows环境下出现编码报错。
  • 集合是无序结构,如果需要IP按出现顺序或者IP段排序,可以对最终的unique_ip_list调用sort()方法排序。

内容的提问来源于stack exchange,提问作者Max_sh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 04:30:50