在Python中使用设置文件的最佳做法是什么?

我有一个命令行脚本,我运行了很多参数。 我现在已经到了一个我有太多争论的地步,我也想在词典中有一些争论。

所以为了简化,我想用设置文件来运行脚本。 我真的不知道用什么库来parsing文件。 这样做的最佳做法是什么? 我当然可以自己掏出一些东西,但如果有这样的图书馆,我全是耳朵。

一些“要求”:

  • 而不是使用pickle我希望它是一个简单的文本文件,可以很容易地阅读和编辑。
  • 我希望能够在其中添加类似字典的数据,即应该支持某种forms的嵌套。

一个简化的伪示例文件:

 truck: color: blue brand: ford city: new york cabriolet: color: black engine: cylinders: 8 placement: mid doors: 2 

查看:

http://wiki.python.org/moin/ConfigParserShootout

获取python中可用的configurationparsing器列表。 一些支持嵌套的configuration文件。

你可以有一个常规的Python模块,比如说config.py:

 truck = dict( color = 'blue', brand = 'ford', ) city = 'new york' cabriolet = dict( color = 'black', engine = dict( cylinders = 8, placement = 'mid', ), doors = 2, ) 

并像这样使用它:

 import config print config.truck['color'] 

你提供的示例configuration实际上是有效的Yaml。 实际上,yaml满足您的所有要求,并且以大量的语言实施,并且非常友善。 我强烈build议你使用它。 PyYAML项目提供了一个很好的python模块,它实现了yaml。

使用yaml模块非常简单:

 import yaml config = yaml.safe_load(open("path/to/config.yml")) 

Yaml和Json是存储settings / config的最简单和最常用的文件格式。 PyYaml可以用来parsingyaml。 Json已经是2.5的一部分了。 Yaml是Json的超集。 Json将解决除了需要转义的多行string之外的大多数用例。 Yaml也照顾这些情况。

 >>> 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} 

我发现这是最有用和易于使用的https://wiki.python.org/moin/ConfigParserExamples

你只需要创build一个“myfile.ini”:

 [SectionOne] Status: Single Name: Derek Value: Yes Age: 30 Single: True [SectionTwo] FavoriteColor=Green [SectionThree] FamilyName: Johnson [Others] Route: 66 

并检索像这样的数据:

 >>> 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格式作为我的configuration,因为它的优雅,可读性,简单性和可移植性。

更多的yaml格式信息可以从wiki中获得。

看看python标准configurationparsing器 。

编辑:由于嵌套似乎是非常重要的,你可能会考虑通过JSON格式来处理你的configuration文件。

然后它成为一个使用dumpsloads方法的json模块的问题,将与字典嵌套到任何级别的工作。