使用Python生成模拟输入文件

4
我正在使用一款科学模拟软件,每个“实验”需要几个基于文本的输入文件。这些文件可能相当冗长并且包含大量样板段落,但是必须在这些文件的许多位置输入特定的“实验特定”值。
我希望自动化生成这些文件,并以可维护的方式完成。
目前,我使用我编写的Python脚本,采用三重引号文本块和变量替换(使用%和.format())来创建文件中的部分。然后我将这些块写入适当的文件中。
考虑到结果输入文件的美观缩进,这对我来说非常困难;此外,随着我增强可以处理的仿真类型和选项,自动生成器脚本变得越来越不透明。
有没有人有关于如何以更优雅和可维护的方式处理此任务的建议?
我知道像jinja这样的模板包。这些是否有助于生成类似于html的文件?有没有人将其用于上述目的?
也许完全不同的方法会更好。
任何建议都将不胜感激。

2
我举例使用Jinja来管理非常复杂的SQL查询,这些查询包含从我的Python脚本调用的多个参数。我并没有使用Jinja中的复杂功能,只是进行变量替换,但相比于使用长串的多行字符串和str.format,它仍然更加方便。 - sega_sai
你是怎么处理这个问题的?我有一个类似的情况,使用基于Fortran的FEM程序,输入文件非常庞大... - user32882
尽管jinja模板方法有很多合理性,但由于时间紧张,我还没有实现它,并保持了原始帖子中概述的方法。 - cytochrome
2个回答

2

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,对于每个param1param2的组合运行实验类型2。虽然函数实现本身可能看起来很混乱,但创建特定模拟文件的脚本将简单明了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接