What's the best practice using a settings file in Python?
我有一个命令行脚本,运行时有很多参数。我现在已经到了一个论点太多的地步,我也想要一些字典形式的论点。
因此,为了简化操作,我希望用设置文件来运行脚本。我真的不知道要用什么库来解析文件。这样做的最佳实践是什么?我当然可以自己动手,但如果有图书馆,我会全力以赴的。
一些"要求":
- 我不想使用
pickle ,而是希望它是一个可以轻松读取和编辑的直接文本文件。 - 我希望能够在其中添加类似字典的数据,也就是说,应该支持某种形式的嵌套。
一个简化的伪示例文件:
1 2 3 4 5 6 7 8 9 10 | truck: color: blue brand: ford city: new york cabriolet: color: black engine: cylinders: 8 placement: mid doors: 2 |
您可以使用常规的python模块,比如config.py,如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 | truck = dict( color = 'blue', brand = 'ford', ) city = 'new york' cabriolet = dict( color = 'black', engine = dict( cylinders = 8, placement = 'mid', ), doors = 2, ) |
像这样使用:
1 2 | import config print config.truck['color'] |
您提供的示例配置实际上是有效的yaml。事实上,yaml满足了您的所有需求,使用大量语言实现,并且非常人性化。我强烈建议你使用它。pyyaml项目提供了一个很好的python模块,它实现了yaml。
使用yaml模块非常简单:
1 2 | import yaml config = yaml.safe_load(open("path/to/config.yml")) |
我发现这是最有用和最容易使用的https://wiki.python.org/moin/configparserexamples(https://wiki.python.org/moin/configparserexamples)
您只需创建一个"myfile.ini",如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | [SectionOne] Status: Single Name: Derek Value: Yes Age: 30 Single: True [SectionTwo] FavoriteColor=Green [SectionThree] FamilyName: Johnson [Others] Route: 66 |
并检索数据,如:
1 2 3 4 5 6 7 8 9 10 11 12 | >>> import ConfigParser >>> Config = ConfigParser.ConfigParser() >>> Config <ConfigParser.ConfigParser instance at 0x00BA9B20> >>> Config.read("myfile.ini") ['c:\\tomorrow.ini'] >>> Config.sections() ['Others', 'SectionThree', 'SectionOne', 'SectionTwo'] >>> Config.options('SectionOne') ['Status', 'Name', 'Value', 'Age', 'Single'] >>> Config.get('SectionOne', 'Status') 'Single' |
yaml和json是存储设置/配置的最简单和最常用的文件格式。pyyaml可用于分析yaml。JSON已经是2.5版本的Python的一部分。yaml是json的超集。JSON将解决除需要转义的多行字符串之外的大多数用例。Yaml也负责处理这些案件。
1 2 3 4 5 | >>> import json >>> config = {'handler' : 'adminhandler.py', 'timeoutsec' : 5 } >>> json.dump(config, open('/tmp/config.json', 'w')) >>> json.load(open('/tmp/config.json')) {u'handler': u'adminhandler.py', u'timeoutsec': 5} |