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

    技术2024-01-22  97

    本文翻译自:What's the best practice using a settings file in Python? [closed]

    I have a command line script that I run with a lot of arguments. 我有一个运行有很多参数的命令行脚本。 I have now come to a point where I have too many arguments, and I want to have some arguments in dictionary form too. 现在到了我有太多参数的地步,我也想以字典形式有一些参数。

    So in order to simplify things I would like to run the script with a settings file instead. 因此,为了简化操作,我想使用设置文件来运行脚本。 I don't really know what libraries to use for the parsing of the file. 我真的不知道该使用什么库来解析文件。 What's the best practice for doing this? 最佳做法是什么? I could of course hammer something out myself, but if there is some library for this, I'm all ears. 我当然可以自己动手做一些事情,但是如果有为此提供的图书馆,我无所不能。

    A few 'demands': 一些“需求”:

    Rather than using pickle I would like it to be a straight forward text file that can easily be read and edited. 与其使用pickle我不希望它是一个简单易懂的文本文件,可以轻松阅读和编辑。 I want to be able to add dictionary-like data in it, ie, some form of nesting should be supported. 我希望能够在其中添加类似字典的数据,即应支持某种形式的嵌套。

    A simplified pseudo example file: 简化的伪示例文件:

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

    #1楼

    参考:https://stackoom.com/question/LD2w/在Python中使用设置文件的最佳做法是什么-关闭


    #2楼

    I Found this the most useful and easy to use https://wiki.python.org/moin/ConfigParserExamples 我发现这是最有用和易于使用的https://wiki.python.org/moin/ConfigParserExamples

    You just create a "myfile.ini" like: 您只需创建一个“ myfile.ini”,例如:

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

    And retrieve the data like: 并像这样检索数据:

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

    #3楼

    Yaml and Json are the simplest and most commonly used file formats to store settings/config. Yaml和Json是存储设置/配置的最简单和最常用的文件格式。 PyYaml can be used to parse yaml. PyYaml可用于解析yaml。 Json is already part of python from 2.5. Json已经从2.5开始成为python的一部分。 Yaml is a superset of Json. Yaml是Json的超集。 Json will solve most uses cases except multi line strings where escaping is required. Json将解决大多数使用情况,但需要转义的多行字符串除外。 Yaml takes care of these cases too. 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}

    #4楼

    You can have a regular Python module, say config.py, like this: 您可以有一个常规的Python模块,例如config.py,如下所示:

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

    and use it like this: 并像这样使用它:

    import config print config.truck['color']

    #5楼

    The sample config you provided is actually valid YAML . 您提供的示例配置实际上是有效的YAML 。 In fact, YAML meets all of your demands, is implemented in a large number of languages, and is extremely human friendly. 实际上,YAML可以满足您的所有需求,并以多种语言实现,并且非常人性化。 I would highly recommend you use it. 我强烈建议您使用它。 The PyYAML project provides a nice python module, that implements YAML. PyYAML项目提供了一个不错的python模块,该模块实现了YAML。

    To use the yaml module is extremely simple: 使用yaml模块非常简单:

    import yaml config = yaml.safe_load(open("path/to/config.yml"))
    Processed: 0.014, SQL: 9