【发布时间】:2011-07-20 17:59:02
【问题描述】:
所以我最近开始为我正在处理的 Python 项目编写配置解析器。我最初避免使用 configparser 和 configobj,因为我想支持这样的配置文件:
key=value
key2=anothervalue
food=burger
food=hotdog
food=cake icecream
简而言之,这个配置文件将经常通过命令行通过 SSH 进行编辑。所以我不想制表符或挑剔间距(如 YAML),但我也希望避免在 vi 中换行具有多个值(很容易 10 或更多)的键。这就是为什么我想支持重复键。
在我的理想世界中,当我向 Python 配置对象询问食物时,它会给我一个带有 ['burger', 'hotdog', 'cake', 'icecream'] 的列表。如果没有定义食物值,它会查看默认配置文件并给我那个/那些值。
以上我已经实现了
然而,当我意识到我想要支持保留内联 cmets 等时,我的麻烦就开始了。我处理读取和写入配置文件的方式是将文件解码为内存中的字典,从字典中读取值,或将值写入字典,然后将该字典转储回文件中。这对于保留行顺序和评论等来说并不是很好,而且它让我大吃一惊。
A) ConfigObj 看起来拥有我需要的一切,除了支持重复键。相反,由于换行,它希望我制作一个列表,在 vi 中通过 ssh 手动编辑会很痛苦。我可以让 configobj 对 ssh/vi 更友好吗?
B) 我的自制解决方案有问题吗?有没有更好的方法来读取/写入/存储我的配置值?是否有任何简单的方法可以通过修改该行并从内存中重写整个配置文件来处理更改配置文件中的键值?
【问题讨论】:
标签: python configuration yaml config