我正在使用一个科学的模拟软件包,需要为每个'实验'进行几个基于文本的输入文件。这些文件可能非常冗长,并且其中包含许多样板部分;但是,必须在这些文件中的许多位置输入特定的“实验特定”值。
我想自动生成这些文件,并以可维护的方式执行。
现在,我正在使用我编写的Python脚本,该脚本使用三重引用的文本块和变量替换(使用%和.format())来创建文件中的部分。然后我将这些块写到适当的文件中。
在结果输入文件中考虑适当的美学缩进证明是困难的;此外,自动生成器脚本变得越来越不透明,因为我增强了可以处理的模拟和选项类型。
有没有人有关于如何以更优雅和可维护的方式管理此任务的建议?
我知道像jinja这样的模板包。除了生成类似html的文件之外,这些还有什么好处?是否有人将这些用于上述目的?
也许完全不同的方法会更好。
任何建议都将不胜感激。
答案 0 :(得分:2)
Jinja并不关心您制作的文件类型。文本是文本是文本,除非它是二进制文件。甚至不确定Jinja是否也在乎。
IPython,特别是nbconvert,uses Jinja2导出LaTeX,ipynb,markdown等。
如果您想要演示,还有一个IPython notebook with Jinja2 magics。
答案 1 :(得分:1)
我对此类问题的常用方法是创建一个小型函数库,帮助我生成和自定义样板。我不知道你的实验定义语言是什么样的,但通常我需要编写一个函数来写出文本来初始化模拟,这个函数写出文本以包含模拟和其他一些函数写出定义每种实验类型的不同文本块。
将这些函数放在一个名为mysim
的文件中,比方说,我可以像这样使用它们:
from mysim import sim_init, sim_conclude, experimentType1, experimentType2
sim_init (name="Today's Simulation", author="Simon")
for param1 in [0,1,2,3,4,5,6,7,8,20,30,40,50,60,70]:
experimentType1 (param1)
for param2 in ["A", "B", "C"]:
experimentType2 (param1, param2)
sim_conclude (savefile="output.txt")
此Python脚本将生成一个模拟输入文件,该文件将针对param1
的每个值运行实验类型1,并为param1
和param2
的每个组合运行实验类型2。
函数实现本身可能看起来很混乱,但创建特定模拟文件的脚本将简单明了。