Python配置文件:推荐什么文件格式?INI格式还合适吗?感觉有点老派

69 投票
8 回答
41682 浏览
提问于 2025-04-17 06:50

我需要为一个Python应用程序存储一些配置(键/值),现在我在寻找最好的方法把这些配置存储在一个文件里。

我发现了Python的ConfigParser,我在想现在使用INI文件格式还合适吗?现在有没有更现代的格式,还是说INI格式依然是推荐的选择?(比如XML、JSON等等)

请分享你们的看法和建议...

8 个回答

9

字典在编程中也非常受欢迎。简单来说,它就是一种哈希表。

{"one": 1, "two": 2} 是一个例子,看起来有点像json格式。

你可以通过 mydict["one"] 来获取字典中的值,这样会返回1。

接着,你可以使用 shelve 将字典保存到文件中:

mydict = shelve.open(filename)
# then you can call it from there, like
mydict["one"]

所以,这比ini文件要简单一些。你可以像操作列表一样添加内容,或者很轻松地更改选项,然后一旦关闭,它就会把内容写回文件。

下面是一个简单的例子,说明我所说的:

import shelve

def main():
    mydict = shelve.open("testfile")
    mydict["newKey"] = value("some comment", 5)
    print(mydict["newKey"].value)
    print(mydict["newKey"].comment)
    mydict.close()


class value():
    def __init__(self, comment, value):
        self.comment = comment
        self.value = value



if __name__ == '__main__':
    main()
36

INI格式还是完全可以用的,正如其他人所说,你的配置文件格式其实是根据你打算怎么使用它来决定的。

我个人比较喜欢YAML格式:简洁、易读、灵活。

谷歌似乎也和我有同样的看法,他们在谷歌应用引擎中也使用了YAML。Python的解析器可以在这里找到。

67

可以考虑使用普通的Python文件作为配置文件。

举个例子(config.py):

# use normal python comments

value1 = 32
value2 = "A string value"

value3 = ["lists", "are", "handy"]
value4 = {"and": "so", "are": "dictionaries"}

在你的程序中,可以用 exec 来加载这个配置文件(文档):

from pathlib import Path

if __name__ == "__main__":
    config = {}
    exec(Path("config.py").read_text(encoding="utf8"), {}, config)
    
    print(config["value1"])
    print(config["value4"])

我喜欢这种方法,原因有以下几点:

  • 在简单的情况下,这种格式和INI格式的配置文件一样容易编写。它还有一个重要的特点和INI文件相似:非常适合版本控制(对于XML和JSON来说,这一点就没那么明显了)。
  • 我喜欢将配置文件放在实际的编程语言中带来的灵活性。

这种方法被广泛使用,以下是一些例子:

  • 一个Django网站的设置文件放在 settings.py 中。Django并不使用 execfile,而是用 import 来读取/执行 settings.py,但最终效果是一样的:设置文件中的代码会被执行。
  • bash shell在启动时会读取并执行 ~/.bashrc
  • Python解释器在启动时会导入 site.py

撰写回答