如何用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
相关产品推荐
相关产品推荐

