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

使用Python比对两个CSV文件并填充目标CSV空列的实现方案

双CSV安全组配置批量填充实现方案

前置依赖

  • 需安装pandas处理CSV文件:pip install pandas
  • IP网段校验使用Python标准库ipaddress,无需额外安装

核心实现规则

完全匹配需求给定的处理逻辑:

  1. DR_sec_grp列填充:
    • 特殊映射:Net-prod-DB2 直接对应为 Net-DR-DB1
    • 其余Prod_sec_grp值直接将字符串中的prod替换为DR即可
  2. Subnet与dr_subnet列填充:
    • 遍历待处理表的src/dest IP字段,与子网信息表的Subnet IP网段逐一匹配
    • 匹配成功:对应生产子网名填入Subnet列,生产子网名按上述映射规则转换后填入dr_subnet列
    • 匹配失败:直接将src/dest IP的取值同时填入Subnet与dr_subnet列

完整Python代码

import pandas as pd
import ipaddress

# 1. 读取两份CSV文件,替换为你的实际文件路径
subnet_df = pd.read_csv("subnet_info.csv") # 第一份:ID、Subnet、Subnet IP
sg_df = pd.read_csv("security_group.csv") # 第二份:待处理的安全组配置表

# 2. 预处理子网信息,生成可直接匹配的网段对象列表
subnet_list = []
for _, row in subnet_df.iterrows():
    try:
        net = ipaddress.IPv4Network(row["Subnet IP"], strict=False)
        subnet_list.append((net, row["Subnet"]))
    except Exception as e:
        print(f"非法网段跳过:{row['Subnet IP']}, 错误信息:{e}")

# 3. 填充DR_sec_grp列
def get_dr_sg(prod_sg):
    if prod_sg == "Net-prod-DB2":
        return "Net-DR-DB1"
    return prod_sg.replace("prod", "DR")

sg_df["DR_sec_grp"] = sg_df["Prod_sec_grp"].apply(get_dr_sg)

# 4. 填充Subnet与dr_subnet列
def match_subnet(ip_str):
    try:
        ip = ipaddress.IPv4Address(ip_str)
    except Exception as e:
        # IP格式非法直接返回原值
        return ip_str, ip_str
    # 匹配网段
    for net, prod_subnet_name in subnet_list:
        if ip in net:
            # 生成对应灾备子网名
            if prod_subnet_name == "Net-prod-DB2":
                dr_subnet_name = "Net-DR-DB1"
            else:
                dr_subnet_name = prod_subnet_name.replace("prod", "DR")
            return prod_subnet_name, dr_subnet_name
    # 未匹配到网段返回原值
    return ip_str, ip_str

# 拆分返回值到两列
sg_df[["Subnet", "dr_subnet"]] = sg_df["src/dest IP"].apply(
    lambda x: pd.Series(match_subnet(x))
)

# 5. 导出结果到新CSV,避免覆盖原文件
sg_df.to_csv("filled_security_group.csv", index=False, encoding="utf-8-sig")
print("处理完成,结果已保存为 filled_security_group.csv")

验证注意事项

  • 若存在重叠网段,可提前对subnet_list按子网掩码长度降序排序,优先匹配最长掩码的更精准网段
  • 需要支持IPv6的话,将代码中IPv4Address/IPv4Network替换为ipaddress.ip_address/ipaddress.ip_network即可自动兼容
  • 输出文件使用utf-8-sig编码,避免Excel打开出现中文乱码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 18:18:04