2010-12-01 22 views
0

Je veux prendre un fichier texte qui contient quelque chose de la forme:Comment puis-je analyser un fichier texte sous forme de dictionnaire et le mettre dans un dictionnaire en python?

{('q0','a'):('q0','a','R'), 
('q0','b'):('q0','a','R'), 
('q1',' '):('q1',' ','L')} 

et le placer dans un dictionnaire réel. Ça fait des heures que je fais du piratage et je suis allé très loin. Je pense que la solution est simple mais je n'ai rien trouvé d'utile sur internet. Toute aide serait appréciée.

+0

Que diriez-vous juste de 'eval'? – Gabe

+0

Votre exemple ressemble à JSON. Sous quelles formes vos fichiers texte prennent-ils normalement? – eksortso

Répondre

0

Si le fichier contient du code Python valide décrivant un dictionnaire, il suffit d'utiliser eval:

>>> value = "{('q0','a'):('q0','a','R'),('q0','b'):('q0','a','R'),('q1',' '):('q1',' ','L')}" 
>>> value 
"{('q0','a'):('q0','a','R'),('q0','b'):('q0','a','R'),('q1',' '):('q1',' ','L')}" 
>>> d = eval(value) 
>>> type(d) 
<type 'dict'> 
>>> d 
{('q1', ' '): ('q1', ' ', 'L'), ('q0', 'a'): ('q0', 'a', 'R'), ('q0', 'b'): ('q0', 'a', 'R')} 

Cependant, je ne recommanderais pas cette méthode d'information qui passe autour (entre les programmes Python, par exemple). Pour cela, j'utiliserais quelque chose comme le pickle, ou peut-être la sérialisation JSON, en fonction des besoins exacts.

0

Essayez d'utiliser la déclaration exec:

>>> d="""{('q0','a'):('q0','a','R'), 
... ('q0','b'):('q0','a','R'), 
... ('q1',' '):('q1',' ','L')}""" 
>>> exec("myDict=%s" % d) 
>>> myDict 
{('q1', ' '): ('q1', ' ', 'L'), ('q0', 'a'): ('q0', 'a', 'R'), ('q0', 'b'): ('q0 
', 'a', 'R')} 
>>> 
3
>>> ast.literal_eval('''{('q0','a'):('q0','a','R'), 
... ('q0','b'):('q0','a','R'), 
... ('q1',' '):('q1',' ','L')} 
... ''') 
{('q1', ' '): ('q1', ' ', 'L'), ('q0', 'a'): ('q0', 'a', 'R'), ('q0', 'b'): 
    ('q0', 'a', 'R')} 
+0

+1 C'est beaucoup mieux que la fonction eval. –

0

Le moyen facile de faire ce que vous voulez est à l'aide eval. Cependant, si le fichier est falsifié, cela peut entraîner des problèmes de sécurité. Je recommande fortement d'utiliser Pickle pour stocker vos dictionnaires dans un fichier.