web-dev-qa-db-fra.com

Quelle est la meilleure pratique en utilisant un fichier de paramètres en Python?

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":

  • Plutôt que d'utiliser pickle, j'aimerais qu'il s'agisse d'un fichier texte simple, facile à lire et à modifier.
  • Je veux pouvoir y ajouter des données de type dictionnaire, c’est-à-dire qu’une certaine forme d’imbrication devrait être prise en charge.

Un pseudo exemple de fichier simplifié:

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

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']  
192
dugres

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"))
145
Benson

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

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