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

如何将Pandas读取Excel生成的字典转换为适配Jinja2的VLAN结构数据

解决方案

方法1:直接通过Pandas导出目标格式(推荐)

你不需要先生成orient为dict的结构,直接调整Pandas导出参数和重命名列即可一步得到需要的结构,代码如下:

import os
import pandas as pd

excel_file = "File.xlsx"
# 读取Excel指定列
df = pd.read_excel(os.path.join("./", excel_file), usecols="A:B,H:I")
# 重命名列名匹配目标字段
df.rename(columns={
    "VLAN ID": "id",
    "VLAN Name": "name",
    "Gateway": "ipaddr",
    "Subnet Mask": "mask"
}, inplace=True)
# 生成vlan列表并封装为最终结构
output = {"vlans": df.to_dict(orient="records")}

方法2:基于已有dict_data转换

如果你已经生成了问题中的dict_data结构,可以通过遍历索引转换:

vlan_total = len(dict_data["VLAN ID"])
vlan_list = []
for idx in range(vlan_total):
    vlan_list.append({
        "id": dict_data["VLAN ID"][idx],
        "name": dict_data["VLAN Name"][idx],
        "ipaddr": dict_data["Gateway"][idx],
        "mask": dict_data["Subnet Mask"][idx]
    })
output = {"vlans": vlan_list}

Jinja2模板修正

注意你当前的模板循环逻辑有误,vlans对应的是列表而非字典,不需要调用items()方法,修正后的模板如下:

{% for vlan in vlans %}
vlan {{ vlan["id"] }}
 name {{ vlan["name"] }}
exit
!
interface vlan {{ vlan["id"] }}
 ip address {{ vlan["ipaddr"] }} {{ vlan["mask"] }}
 description {{ vlan["name"] }}
exit
!
{% endfor %}

修正后渲染得到的结果和你预期的输出完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 13:06:03