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>