2016-04-22 47 views
0

基本上我想從文本文件讀取一個字符串並將其存儲爲orderedDict。 我的文件包含以下內容。Python如何從txt文件中讀取orderedDict

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']]))]) 

我怎麼會在Python檢索值:

xxx 

    xxx_a -> xxx_b 

    xxx_c -> xxx_d 
+2

該文件來自哪裏?你能用更好的格式嗎? – jonrsharpe

+0

當我嘗試運行常規代碼時,它給了我語法錯誤 – Greg

+2

不清楚原始字符串中沒有出現'xxx_c - > xxx_d'的輸出,並且輸出中沒有出現'yyy'不匹配。但是如果我是你,我會查看[execfile](https://docs.python.org/2/library/functions.html#execfile)並從集合中嘗試這樣一段代碼'import OrderedDict; v = {'OrderedDict':OrderedDict}; execfile('1.txt',{},v);打印v'(我假設你的文件名爲'1.txt')**注意**如果你不信任這個文件的源文件,調用execfile是危險的。它可以例如刪除你計算機上的所有文件。 –

回答

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) 

驗證它的工作原理:

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

輸出:

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

說了這麼多,你的要求很奇怪。如果您可以控制數據的來源,請使用支持訂單的真正序列化格式(所以不要使用JSON)。不要輸出Python代碼。