导入CSV文件到Python时如何替换指定格式字符串生成合规Cisco ASR配置
实现方案
最简单的实现方式是在读取CSV字段后、传入Jinja模板渲染前,直接预处理oline_BD_assignment字段即可,无需修改模板代码,以下是具体修改内容:
核心处理逻辑
原格式4323:63210:BD的结构固定为[前缀]:[数值]:BD,直接按冒号拆分取前两段拼接下划线即可,无需复杂正则匹配,代码更易维护。
修改后的完整Python脚本
import os import jinja2 import csv # 提前读取模板,避免每次循环重复读文件提升效率 template_file = 'asr_generate_config.j2' with open(template_file) as f: list_template = f.read() template = jinja2.Template(list_template) csv_file = "BFL1_AR1.csv" with open(csv_file) as f: read_csv = csv.DictReader(f) for list_elements in read_csv: generated_list = list_elements['TEST'] generated_list = generated_list.split() list_elements['TEST'] = generated_list # 新增:处理BD字段格式 bd_raw = list_elements['oline_BD_assignment'] bd_parts = bd_raw.split(':') list_elements['oline_BD_assignment'] = f"{bd_parts[0]}_{bd_parts[1]}" print() print('-' * 80) print(template.render(list_elements)) print('-' * 80) print()
可选正则实现方式
如果你更习惯用正则处理,也可以用替换逻辑替代拆分逻辑,效果完全一致:
import re # 替换上面的拆分逻辑为以下代码 bd_raw = list_elements['oline_BD_assignment'] list_elements['oline_BD_assignment'] = re.sub(r'(\d+):(\d+):BD', r'\1_\2', bd_raw)
效果验证
修改后生成的配置会自动将所有4323:63210:BD格式的内容替换为4323_63210,完全符合ASR设备的配置语法要求,可直接复制粘贴使用。
内容的提问来源于stack exchange,提问作者Javier Sanchez
相关产品推荐
相关产品推荐

