Python Jinja2模板和Excel文件

Python Jinja2模板和Excel文件,python,Python,我是python新手,尝试使用jinja2模板编写一些配置文件。我已经创建了带有花括号的模板。我正在使用excel文件存储所有值。我所看到的问题是,它不可伸缩,因为我需要输入每个单元格的data.value和每个变量,我有40多个变量。有没有一种方法可以在不手动输入每个单元格的情况下读取值,并以相同的方式处理渲染命令 我对Python非常陌生,只尝试了下面粘贴的内容 import openpyxl import jinja2 from jinja2 import Environment, Fil

我是python新手,尝试使用jinja2模板编写一些配置文件。我已经创建了带有花括号的模板。我正在使用excel文件存储所有值。我所看到的问题是,它不可伸缩,因为我需要输入每个单元格的data.value和每个变量,我有40多个变量。有没有一种方法可以在不手动输入每个单元格的情况下读取值,并以相同的方式处理渲染命令

我对Python非常陌生,只尝试了下面粘贴的内容

import openpyxl
import jinja2
from jinja2 import Environment, FileSystemLoader
from jinja2 import Template
output = []

env = Environment(loader=FileSystemLoader('C:\\Python\\Templates'))
template1 = env.get_template('config.cfg')

xfile = openpyxl.load_workbook("templates.xlsx")
xsheets = xfile.sheetnames
data = xfile.get_sheet_by_name('variables')

DST_ROUTE1 = data['e24'].value
DST_ROUTE2 = data['e25'].value
DST_ROUTE3 = data['e26'].value
DST_ROUTE4 = data['e27'].value
DST_PREFIX1 = data['e28'].value
DST_PREFIX2 = data['e29'].value
DST_PREFIX3 = data['e30'].value
DST_PREFIX4 = data['e31'].value

output.append(template1.render(DST_ROUTE1=DST_ROUTE1, DST_ROUTE2=DST_ROUTE2, DST_PREFIX1=DST_PREFIX1))

with open("C:\\Python\\script.txt", mode='w+') as f:
f.writelines(output) 

您可以将整个字典分配给模板并在那里循环

import openpyxl
import jinja2
from jinja2 import Environment, FileSystemLoader
from jinja2 import Template
output = []

env = Environment(loader=FileSystemLoader('C:\\Python\\Templates'))
template1 = env.get_template('config.cfg')

xfile = openpyxl.load_workbook("templates.xlsx")
xsheets = xfile.sheetnames
data = xfile.get_sheet_by_name('variables')

output.append(template1.render(sheets_by_name=data))

with open("C:\\Python\\script.txt", mode='w+') as f:
    f.writelines(output) 
模板的外观如下所示:

<table>
{% for key, sheet in sheets_by_name.items() %}
<tr>
    <td>{{ key }}</td><td>{{ sheet.value }}</td>
</tr>
{% endfor %}
</table>
表\u frame.tmpl

<table>
    {{ sheets }}
</table>

{{sheets}}
表_row.tmpl

<tr>
    <td>{{ key }}</td><td>{{ sheet }}</td>
</tr>

{{key}}{{sheet}

您只需将
数据
传递给模板,并在模板本身中使用
{{data.e29.value}}
。这有帮助吗?很抱歉,我不太懂。我确实从中选择了一种方法,将excel数据转换成字典,我尝试使用pandas的df.to_dict()函数,该函数很好地给出了值和键值。我想我需要弄清楚如何读取这些值并将它们放入模板中,模板基本上是Cisco设备的配置文件。我不理解这个评论。这与答案有什么关系?你不明白哪一部分?我甚至使用了您自己的代码并对其进行了修改。伙计,我说我是Python新手,因此很难理解您让我做什么。请你再提一次蟒蛇3好吗。我是一名网络工程师,正在研究编写某些实施计划,我可能会一次又一次地编写这些计划。您提到了一些模板,我应该把它们放在哪里?对不起,我不知道如何更好地解释它。尤其是在你没有告诉我你到底被困在哪里的情况下。
<tr>
    <td>{{ key }}</td><td>{{ sheet }}</td>
</tr>