it-swarm.com.de

Was ist die beste Vorgehensweise bei der Verwendung einer Einstellungsdatei in Python?

Ich habe ein Befehlszeilenskript, das ich mit vielen Argumenten ausführe. Ich bin jetzt an einem Punkt angelangt, an dem ich zu viele Argumente habe, und ich möchte auch einige Argumente in Wörterbuchform haben.

Aus Gründen der Vereinfachung möchte ich das Skript stattdessen mit einer Einstellungsdatei ausführen. Ich weiß nicht genau, welche Bibliotheken zum Parsen der Datei verwendet werden sollen. Was ist die beste Vorgehensweise dafür? Ich könnte natürlich selbst etwas raushauen, aber wenn es eine Bibliothek dafür gibt, bin ich ganz Ohr.

Ein paar "Forderungen":

  • Anstatt pickle zu verwenden, möchte ich, dass es sich um eine einfache Textdatei handelt, die einfach gelesen und bearbeitet werden kann.
  • Ich möchte in der Lage sein, wörterbuchartige Daten hinzuzufügen, d. H. Es sollte eine Form der Verschachtelung unterstützt werden.

Eine vereinfachte Pseudo-Beispieldatei:

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

Sie können ein reguläres Python Modul haben, sagen Sie config.py, so:

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

und benutze es so:

import config
print config.truck['color']  
192
dugres

Die von Ihnen angegebene Beispielkonfiguration ist tatsächlich gültig YAML . Tatsächlich erfüllt YAML alle Ihre Anforderungen, ist in einer Vielzahl von Sprachen implementiert und äußerst menschlich. Ich kann es nur empfehlen. Das PyYAML-Projekt bietet ein Nice python Modul, das YAML implementiert.

Das yaml Modul zu benutzen ist sehr einfach:

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

Ich fand dies das nützlichste und am einfachsten zu verwendende https://wiki.python.org/moin/ConfigParserExamples

Sie erstellen einfach eine "myfile.ini" wie:

[SectionOne]
Status: Single
Name: Derek
Value: Yes
Age: 30
Single: True

[SectionTwo]
FavoriteColor=Green
[SectionThree]
FamilyName: Johnson

[Others]
Route: 66

Und rufen Sie die Daten wie folgt ab:

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

Yaml und Json sind die einfachsten und am häufigsten verwendeten Dateiformate zum Speichern von settings/config. PyYaml kann zum Parsen von Yaml verwendet werden. Json ist bereits Teil von python ab 2.5. Yaml ist eine Obermenge von Json. Json löst die meisten Anwendungsfälle mit Ausnahme von Strings mit mehreren Zeilen, bei denen ein Escape-Befehl erforderlich ist. Yaml kümmert sich auch um diese Fälle.

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