J'ai un script en ligne de commande que je lance avec beaucoup d'arguments. Je suis maintenant arrivé à un point où j'ai trop d'arguments, et je veux aussi avoir des arguments sous forme de dictionnaire.
Donc, afin de simplifier les choses, j'aimerais plutôt exécuter le script avec un fichier de paramètres. Je ne sais pas vraiment quelles bibliothèques utiliser pour l'analyse du fichier. Quelle est la meilleure pratique pour cela? Je pourrais bien sûr me débrouiller avec quelque chose, mais s'il y a une bibliothèque pour cela, je suis tout ouïe.
Quelques "demandes":
pickle
, j'aimerais qu'il s'agisse d'un fichier texte simple, facile à lire et à modifier.Un pseudo exemple de fichier simplifié:
truck:
color: blue
brand: ford
city: new york
cabriolet:
color: black
engine:
cylinders: 8
placement: mid
doors: 2
Vous pouvez avoir un module Python normal, par exemple config.py, comme ceci:
truck = dict(
color = 'blue',
brand = 'ford',
)
city = 'new york'
cabriolet = dict(
color = 'black',
engine = dict(
cylinders = 8,
placement = 'mid',
),
doors = 2,
)
et l'utiliser comme ça:
import config
print config.truck['color']
L'exemple de configuration que vous avez fourni est en réalité valide YAML . En fait, YAML répond à toutes vos demandes, est mis en œuvre dans un grand nombre de langues et est extrêmement convivial. Je vous recommande fortement de l'utiliser. Le projet PyYAML fournit un module Nice python, qui implémente YAML.
Utiliser le module yaml est extrêmement simple:
import yaml
config = yaml.safe_load(open("path/to/config.yml"))
J'ai trouvé que c'était le plus utile et le plus facile à utiliser https://wiki.python.org/moin/ConfigParserExamples
Vous venez de créer un "myfile.ini" comme:
[SectionOne]
Status: Single
Name: Derek
Value: Yes
Age: 30
Single: True
[SectionTwo]
FavoriteColor=Green
[SectionThree]
FamilyName: Johnson
[Others]
Route: 66
Et récupérez les données comme:
>>> 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 et Json sont les formats de fichiers les plus simples et les plus utilisés pour stocker les paramètres/config. PyYaml peut être utilisé pour analyser yaml. Json fait déjà partie de python à partir de la version 2.5. Yaml est un sur-ensemble de Json. Json résoudra la plupart des cas d'utilisation, à l'exception des chaînes multilignes pour lesquelles une évasion est requise. Yaml s'occupe également de ces cas.
>>> 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}