Python - 从CSV读取列表

时间:2015-09-27 13:32:14

标签: python list csv dictionary

我试图从CSV文件中读取List的字典。 我试图访问数据结构,如:

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文件中正确检索完整的列表词典?

2 个答案:

答案 0 :(得分: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表达式,但仅限于 literals ,Python语法定义对象,如字典,列表,元组,集合和字符串,数字,布尔值和{ {1}}。

答案 1 :(得分: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)