2010-03-23 3 views
1

Je fais un plugin pour un autre programme et j'essaie de rendre la chose la plus légère possible.Mise à jour de la section dans ConfigParser (ou une alternative)

Ce que je dois faire est de pouvoir mettre à jour le nom d'une section dans le fichier de configuration de ConfigParser. J'ai alors des champs de texte où l'utilisateur peut éditer le nom du projet, auteur, email et année.

Je ne pense pas changer [nom du projet] est possible, donc je l'ai pensé à deux solutions:

1 -Avez mon fichier de configuration comme ceci:

[0] 
projectname: foobar 
author:john doe 
email: [email protected] 
year: 2010 

cette façon, je peux changer le nom du projet comme une autre option. Mais le problème est, j'aurais besoin que la section # soit auto incrémentée ([0], [1], etc.). Et pour ce faire, je devrais obtenir chaque section, sorte de, et comprendre ce que le prochain numéro devrait être. L'autre option consisterait à supprimer la section entière et sa valeur, et à l'ajouter à nouveau avec les valeurs mises à jour, ce qui nécessiterait un peu plus de travail, comme le passage d'une variable qui contient le nom de l'ancienne section via les fonctions , etc, mais cela ne me dérangerait pas si c'est plus rapide.

Lequel des deux est le meilleur? ou y a-t-il un autre moyen? Je suis prêt à aller avec la solution la plus rapide/légère possible, peu importe si elle nécessite plus de travail ou non.

Répondre

2

Les fichiers ini sont probablement les mieux adaptés pour en configurant applications, avec des entrées bien définies et ainsi de suite. Il semble que vous souhaitiez un outil de sérialisation plus générique. JSON fonctionnerait probablement bien pour cela. Peut-être voulez-vous stocker une représentation JSON d'une liste (d'où vos indices incrémentés) de dicts avec ces champs?

L'utilisation du module json dans stdlib est assez simple. Par exemple, pour stocker les enregistrements couple vous

import json 

projects = [] 
projects.append({'project_name': 'foobar', 
       'author': 'John Doe', 
       'email': '[email protected]', 
       'year': '2010'}) 
projects.append({'project_name': 'baz', 
       'author': 'Cat Stevens', 
       'email': '[email protected]', 
       'year': '2009'}) 

with open('projects.json', 'w') as f: 
    json.dump(projects, f) 

De même vous récupérer les données sérialisés à partir du fichier avec json.load(f), où vous avez ouvert f en mode lecture.

+0

merci. je vais expérimenter avec ça – sqram

Questions connexes