2015-09-27 195 views
1

我想從CSV文件讀取列表字典。 我試圖訪問數據結構,如:Python - 從CSV讀取列表字典

dbfree = {u'keyname': [u'x', 'y', 'z']} 

結構都存儲在一個CSV這個代碼文件,這些數據:

for key, val in dbfree.items(): 
    w.writerow([key, val]) 

我這樣讀CSV:

dbproj = {} 
for key, val in unicodecsv.reader(open(filename)): 
    dbproj[key] = val 

但輸出是這樣的:

{u'key name': u"[u'x', 'y', 'z']" 

如何從CSV文件中正確檢索列表的完整字典?

回答

4

你寫的repr()輸出嵌套列表的位置:

for key, val in dbfree.items(): 
    w.writerow([key, val]) 

這裏val[u'x', 'y', 'z'];將其存儲在一列中csv文件只是簡單地寫出repr(val)的結果。

您可以在串再次與ast.literal_eval() function解碼爲Python對象:

import ast 

dbproj = {} 
for key, val in unicodecsv.reader(open(filename)): 
    dbproj[key] = ast.literal_eval(val) 

ast.literal_eval()解釋輸入爲Python表達,但限於文字,Python語法的對象定義如字典,列表,元組,集合和字符串,數字,布爾值和None

1

你需要反序列化值,你可以使用json模塊:

import json 

for key, val in dbfree.items(): 
     w.writerow([key, json.dumps(val)]) 

閱讀:

dbproj = {} 
for key, val in unicodecsv.reader(open(filename)): 
    dbproj[key] = json.loads(val)