2016-04-22 12 views
0

Grundsätzlich möchte ich eine Zeichenfolge aus einer Textdatei lesen und sie als orderedDict speichern. Meine Datei enthält den folgenden Inhalt.Python wie man orderedDict aus einer TXT-Datei liest

content.txt:

variable_one=OrderedDict([('xxx', [['xxx_a', 'xxx_b'],['xx_c', 'xx_d']]),('yyy', [['yyy_a', 'yyy_b'],['yy_c', 'yy_d']]))]) 

variable_two=OrderedDict([('xxx', [['xxx_a', 'xxx_b'],['xx_c', 'xx_d']]),('yyy', [['yyy_a', 'yyy_b'],['yy_c', 'yy_d']]))]) 

wie werde ich Werte in Python abrufen wie:

xxx 

    xxx_a -> xxx_b 

    xxx_c -> xxx_d 
+2

Woher kam die Datei? Könnten Sie ein besseres Format verwenden? – jonrsharpe

+0

es gibt mir Syntaxfehler, wenn ich versuche, den regulären Code – Greg

+2

Es ist nicht klar, was genau Sie ausgeben möchten xxx_c -> xxx_d' nicht im ursprünglichen String auftreten und 'yyy' nicht in der Ausgabe, die Sie Klammer haben Mismatch auch. Aber wenn ich Sie wäre, würde ich [execfile] (https://docs.python.org/2/library/functions.html#execfile) betrachten und ein solches Stück Code 'aus dem Collections importieren OrderedDict; v = {'OrderedDict': OrderedDict}; execfile ('1.txt', {}, v); print v' (Ich gehe davon aus, dass Sie die Datei '1.txt' nennen) ** Hinweis ** das Aufrufen von execfile ist gefährlich, wenn Sie der Quelle dieser Datei nicht vertrauen, da sie zum Beispiel alle Dateien auf Ihrem Computer löschen kann. –

Antwort

0
import re 
from ast import literal_eval 
from collections import OrderedDict 

# This string is slightly different from your sample which had an extra bracket 
line = "variable_one=OrderedDict([('xxx', [['xxx_a', 'xxx_b'],['xx_c', 'xx_d']]),('yyy', [['yyy_a', 'yyy_b'],['yy_c', 'yy_d']])])" 
match = re.match(r'(\w+)\s*=\s*OrderedDict\((.+)\)\s*$', line) 
variable, data = match.groups() 

# This allows safe evaluation: data can only be a basic data structure 
data = literal_eval(data) 

data = [(key, OrderedDict(val)) for key, val in data] 
data = OrderedDict(data) 

Überprüfung, dass es funktioniert:

print variable 
import json 
print json.dumps(data, indent=4) 

Ausgabe:

variable_one 
{ 
    "xxx": { 
     "xxx_a": "xxx_b", 
     "xx_c": "xx_d" 
    }, 
    "yyy": { 
     "yyy_a": "yyy_b", 
     "yy_c": "yy_d" 
    } 
} 

Nachdem all das gesagt wurde, ist Ihre Anfrage sehr merkwürdig. Wenn Sie die Quelle der Daten steuern können, verwenden Sie ein echtes Serialisierungsformat, das die Reihenfolge unterstützt (also nicht JSON). Geben Sie keinen Python-Code aus.