J'ai un problème. Mon programme utilise le fichier de configuration pour définir des options et une de ces options est un tuple. Voici ce que je veux dire: etc ...
Puis-je analyser cela en tuple avec le module ConfigParser à Python? Y a-t-il un moyen facile de faire cela? P> p>
7 Réponses :
Je ne connais pas Configpargers, mais vous pouvez facilement la lire dans une liste (peut-être utiliser .append () code>), puis faire
myeuple = tuple (myList) code> p>
Vous pouvez obtenir la liste des articles et utiliser une compréhension de liste pour créer une liste de tous les éléments que le nom commence par un préfixe défini, dans votre cas dossier em>
Cette solution suppose que les entrées du fichier sont dans le bon ordre.
@Terrel Shumway est le cas, mais vous pouvez toujours trier les objets à l'avance.
Tri à l'avance ne vous aidera pas: Dossier [10]
Votre configuration pourrait être: supposant que vous avez configuré dans un fichier nommé FOO.CFG, vous pouvez procéder comme suit: P> import ConfigParser
cp = ConfigParser.ConfigParser()
cp.read("foo.cfg")
folder = eval(cp.get("common", "folder"), {}, {})
print folder
print type(folder)
Je conviendrais que dans le général Eval () n'est pas bon. Dans le cas où vous contrôlez l'entrée et restreindre l'environnement d'exécution, il s'agit d'une solution acceptable.
Mal non, gobsmacking dangereux oui. La clé de l'utilisation plus sûre de EVAL () consiste à garantir que vous avez spécifié les paramètres globaux et locaux à Eval (). Voir docs.pytthon.org/2/library/fonctions.html#eval A> Pour plus de détails.
#!/usr/bin/env python sample = """ [common] logfile=log.txt db_host=localhost db_user=root db_pass=password folder[1]=/home/scorpil folder[2]=/media/sda5/ folder[3]=/media/sdb5/ """ from cStringIO import StringIO import ConfigParser import re FOLDER_MATCH = re.compile(r"folder\[(\d+)\]$").match def read_list(items,pmatch=FOLDER_MATCH): if not hasattr(pmatch,"__call__"): pmatch = re.compile(pmatch).match folder_list = [] for k,v in items: m = pmatch(k) if m: folder_list.append((int(m.group(1)),v)) return tuple( kv[1] for kv in sorted(folder_list) ) if __name__ == '__main__': cp = ConfigParser.SafeConfigParser() cp.readfp(StringIO(sample),"sample") print read_list(cp.items("common"))
Si vous pouvez modifier le format de configuration comme celui-ci:
config.get("common", "folder").split("\n")
Créer la configuration:
tuple(json.loads(config.get('common', 'folders')))
Vous pouvez rester à JSON complètement
puis travaillez avec celui-ci p> tts.json code> p>