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

如何用Python移除或忽略JSON文件中的ipv6Prefix条目?

解决Google Cloud IP范围提取IPv4时的KeyError问题

核心思路

不要在遍历原列表时直接删除元素(会导致遍历逻辑混乱引发错误),而是通过键存在性检查筛选出仅包含IPv4的条目,或者遍历列表副本再修改原列表。

方法一:列表推导式直接筛选(最简洁高效)

直接遍历prefixes数组,只保留包含ipv4Prefix键的条目并提取地址,完全避开IPv6相关条目:

import requests

# 获取Google Cloud IP范围数据
response = requests.get("https://www.gstatic.com/ipranges/cloud.json")
data = response.json()

# 筛选并提取所有IPv4前缀
ipv4_prefixes = [item["ipv4Prefix"] for item in data["prefixes"] if "ipv4Prefix" in item]

# 输出结果(按需处理)
for prefix in ipv4_prefixes:
    print(prefix)

方法二:遍历过程中跳过IPv6条目(灵活扩展)

如果需要额外处理逻辑(比如同时收集IPv6地址),可以在遍历时分情况处理:

import requests

response = requests.get("https://www.gstatic.com/ipranges/cloud.json")
data = response.json()

ipv4_prefixes = []
ipv6_prefixes = []

for item in data["prefixes"]:
    if "ipv4Prefix" in item:
        ipv4_prefixes.append(item["ipv4Prefix"])
    elif "ipv6Prefix" in item:
        ipv6_prefixes.append(item["ipv6Prefix"])
    # 其他类型条目可按需添加处理逻辑

为什么你的删除操作会报错?

你之前用del或dict.pop()时触发错误,大概率是因为遍历原列表的同时修改列表本身(比如删除元素),导致列表长度变化,遍历的索引与实际元素不匹配,进而引发TypeError或索引异常。

如果一定要修改原列表(不推荐,不如直接筛选),可以遍历列表的副本:

# 遍历原列表的副本,修改原列表
for item in data["prefixes"].copy():
    if "ipv6Prefix" in item:
        data["prefixes"].remove(item)

# 此时原列表已无IPv6条目,可安全提取IPv4
ipv4_prefixes = [item["ipv4Prefix"] for item in data["prefixes"]]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 13:57:29