You need to enable JavaScript to run this app. 使用同一Jinja模板结合Pandas读Excel批量生成网络配置出错如何解决
优惠活动
大模型
产品
解决方案
定价
更多

使用同一Jinja模板结合Pandas读Excel批量生成网络配置出错如何解决

问题根因

你使用df.to_dict(orient="dict")转换得到的是列名作为键,整列所有索引对应的值组成的字典为值的结构,渲染模板时直接传入整个结构,Jinja会把整列的字典完整输出,自然不符合预期。

修复方案

推荐修改DataFrame转字典的参数,使用orient="records"得到每行对应一个设备参数字典的列表,遍历该列表生成配置即可,无需修改Jinja模板。

修改后的main.py代码

#!usr/bin/env python3

import os
from jinja2 import Environment, FileSystemLoader
import pandas as pd
from pprint import pprint

# 读取Excel文件
df = pd.read_excel(os.path.join("./", "device-list.xlsx"), sheet_name="Test")
# 转换为字典:每一行对应一个设备的所有参数,组成列表
list_data = df.to_dict(orient="records")
# 统一处理所有键:空格替换为下划线、转为小写
processed_devices = []
for device in list_data:
    formatted_device = {key.replace(" ", "_").lower(): value for key, value in device.items()}
    processed_devices.append(formatted_device)

# 打印处理后的数据
pprint(processed_devices)

# 加载Jinja模板
env = Environment(loader=FileSystemLoader("./"), trim_blocks=True, lstrip_blocks=True)
template = env.get_template("switch.j2")

# 遍历每个设备生成配置
for device in processed_devices:
    config = template.render(device)
    with open(f'{device["hostname"]}.txt', "w", encoding="utf-8") as cfg_file:
        cfg_file.write(config)

print("完成")

可选修改方式(不更改转字典参数)

如果你不想调整转字典的逻辑,也可以在原循环中按索引提取当前设备的参数再传入模板:

i = 0
while i < len(data["hostname"]):
    # 按索引提取当前设备的所有参数
    current_device = {key: value[i] for key, value in data.items()}
    config = template.render(current_device)
    with open(f'{data["hostname"][i]}.txt', "w") as cfg_file:
        cfg_file.write(config)
    i += 1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 15:24:03