7
votes

Gardez les fichiers de sortie Configpararser triés

J'ai remarqué avec mon contrôle source que le contenu des fichiers de sortie générés avec CONFIGPARSER n'est jamais dans le même ordre. Parfois, des sections changent de place ou des options à l'intérieur des sections, même sans modification des valeurs.

Y a-t-il un moyen de garder les choses triés dans le fichier de configuration afin que je n'ai pas à commettre des changements triviaux à chaque fois que je lance mon application?


1 commentaires

Cette réponse à une question similaire donne quelques suggestions sur Comment accomplir une sortie triée à Python 2.


4 Réponses :


2
votes

Non. La bibliothèque Configpararser écrit des choses dans l'ordre de hachage de dictionnaire. (Vous pouvez voir cela si vous regardez le code source.) Il existe des remplacements pour ce module qui font un meilleur travail.

Je verrai si je peux en trouver un et l'ajouter ici.

http://www.voidspace.org.uk/python/configobj .html # Introduction est celui que je pensais. Ce n'est pas un remplaçant d'abandon, mais il est très facile à utiliser.


0 commentaires

-1
votes

Configparate est basé sur le format de fichier INI, qui, dans sa conception, est censé ne pas être sensible à l'ordre. Si votre format de fichier de configuration est sensible à la commande, vous ne pouvez pas utiliser ConfigParser. Il peut également confondre des personnes si vous avez un format d'ini-type sensible à l'ordre des déclarations ...


2 commentaires

Il est toujours utile de faire sortir les articles dans le même ordre si vous en vérifiez les résultats et souhaitez voir des diffys de la version à la recherche raisonnable à la version.


Ah, à droite. J'ai complètement manqué que vous créiez des fichiers. Ma faute. C'est configparyseur après tout. ;)



9
votes

On dirait que ceci a été corrigé dans python 3.1 et 2.7 avec le Introduction de dictionnaires commandés:

La bibliothèque standard prend désormais en charge l'utilisation des dictionnaires commandés dans plusieurs modules. Le module Configparate utilise eux par défaut. Cela permet Les fichiers de configuration sont lus, modifiés, puis écrit dans leur commande originale.


2 commentaires

Dans Python 2.7, vous pouvez à partir des collections ImporteredDictDict et utilisez Configpararser (dictype = commanddddict) Pour faire utiliser l'analyseur d'un dictionnaire commandé. Sur la base d'une quantité minimale de tests, je pense que cela devrait bien vous servir.


Dans Python 2.7, vous n'avez pas besoin de faire cet EKSORTSO, c'est la valeur par défaut.



3
votes

Si vous souhaitez prendre une étape supplémentaire que la réponse d'Alexander Ljungberg et trier les sections et le contenu des sections que vous pouvez utiliser:

config = ConfigParser.ConfigParser({}, collections.OrderedDict)
config.read('testfile.ini')
# Order the content of each section alphabetically
for section in config._sections:
    config._sections[section] = collections.OrderedDict(sorted(config._sections[section].items(), key=lambda t: t[0]))

# Order all sections alphabetically
config._sections = collections.OrderedDict(sorted(config._sections.items(), key=lambda t: t[0] ))

# Write ini file to standard output
config.write(sys.stdout)


0 commentaires