在列中解析包含列表的CSV

时间:2013-12-07 18:12:02

标签: python python-2.7 parsing csv import-from-csv

我有一个通过csv.writer对象生成的CSV文件。以下是生成文件的代码的简化版本:

output = open('out.txt', 'ab+')
writer = csv.writer(output, dialect='excel')

for item in dataset:
    row = []
    row.append(item['id'])
    row.append(item['timestamp'])

    values = []
    for value in item['values']
        values.append(value['name'])
    row.append(values)

    writer.writerow(row)
    output.flush()

output.close()

CSV文件中的示例行如下所示:

457458856894140182,Mon Dec 02 11:36:48 +0000 2013,[u'Sugar', u'Rice', u'Bleach']

我尝试使用csv.reader对象将数据解析回另一个脚本,但尚未能够正确解析第三列中的列表。 Python只将整个值[u'Sugar', u'Rice', u'Bleach']视为字符串。例如,代码:

input = open('out.txt', 'rb')
reader = csv.reader(input, dialect='excel')

for row in reader:
    print row[2][0]

input.close()

...只需在换行符上输出一长列[

如何正确解析此CSV文件,以便将第三列中的结构汇编回内存中的列表?

1 个答案:

答案 0 :(得分:1)

从字符串[u'Sugar', u'Rice', u'Bleach'],您可以使用list获取相应的ast.literal_eval对象:

>>> a="[u'Sugar', u'Rice', u'Bleach']"
>>> import ast
>>> ast.literal_eval(a)
[u'Sugar', u'Rice', u'Bleach']
>>> ast.literal_eval(a)[1]
u'Rice'
>>>