Python 中模板文件评估

1 投票
3 回答
2664 浏览
提问于 2025-04-15 22:52

我正在尝试用Python把一组模板转换成一组配置文件,这些配置文件的内容是根据一个主配置文件里的值来决定的。不过,我遇到了一些问题。下面是一个模板文件的例子。

file1.cfg.template

%(CLIENT1)s %(HOST1)s  %(PORT1)d  C  %(COMPID1)s
%(CLIENT2)s %(HOST2)s  %(PORT2)d  C  %(COMPID2)s

这个文件为每个客户都有一条记录。像这样的配置文件有成百上千个,我不想为每种配置文件写逻辑。希望Python能根据从主XML配置文件读取的一组全局值,自动替换并生成配置文件。但是,在上面的例子中,如果CLIENT2不存在,我该怎么删除那一行呢?我希望Python能用类似下面的方式生成配置文件:

os.open("file1.cfg.template").read() % myhash

这里的myhash是主配置文件中配置参数的哈希值,可能根本不包含CLIENT2。如果不包含CLIENT2,我希望那一行能从文件中消失。有没有办法在文件里插入一些'IF'块,让Python来判断呢?

谢谢你的帮助,任何建议都非常欢迎。

3 个回答

0

假设这些文件已经存在,我会为像CLIENT2这样的东西设置默认值(前提是你提前知道所有可能的键)。你可以把默认值设置成一些不常见的东西,这样你就可以这样做:

config = os.open("file1.cfg.template").read() % myhash
config = [l for l in config.split('\n') if <l does not have unusual text>].join('\n')

我同意其他人的看法,从长远来看,使用一个更强大的模板会更好。

3

听起来你可能已经不再适合最初那个简单的自制模板解决方案了。也许你应该考虑换成像Jinja这样的东西?使用一个现成的解决方案可能比自己创建和维护一个解决方案要简单得多。

其他选择:

撰写回答