Ваш образец очень похож на отображение pandas кадра данных. Сохранение такого кадра в CSV имеет некоторые из тех же проблем, хотя, возможно, проще. Недавно я ответил на похожий случай, отличающийся тем, что списки были заменены numpy массивами.
В любом случае, давайте попробуем более простое воссоздание.
Определите словарь:
In [77]: {'Color':'Red', 'Count':2, 'People':['Ben','Mike']}
Out[77]: {'Color': 'Red', 'Count': 2, 'People': ['Ben', 'Mike']}
In [78]: pd.DataFrame([_])
Out[78]:
Color Count People
0 Red 2 [Ben, Mike]
Или с 3 строками:
In [79]: pd.DataFrame([_77,_77,_77])
Out[79]:
Color Count People
0 Red 2 [Ben, Mike]
1 Red 2 [Ben, Mike]
2 Red 2 [Ben, Mike]
Если мы напишем это в csv:
In [80]: df = pd.DataFrame([_77,_77,_77])
In [81]: df.to_csv('stack59675154.txt')
In [82]: cat stack59675154.txt
,Color,Count,People
0,Red,2,"['Ben', 'Mike']"
1,Red,2,"['Ben', 'Mike']"
2,Red,2,"['Ben', 'Mike']"
, это как ваш CSV, за исключением того, что использует разделитель запятых и заключает в кавычки списки. На самом деле сохраняется строка печати списка, str(['Ben', 'Mike'])
.
pandas может прочитать это:
In [83]: data = pd.read_csv('stack59675154.txt')
In [84]: data
Out[84]:
Unnamed: 0 Color Count People
0 0 Red 2 ['Ben', 'Mike']
1 1 Red 2 ['Ben', 'Mike']
2 2 Red 2 ['Ben', 'Mike']
In [85]: data['People'][0]
Out[85]: "['Ben', 'Mike']"
Но столбец People
на самом деле содержит строки, а не списки. К счастью, строки могут быть eval
:
In [86]: eval(_)
Out[86]: ['Ben', 'Mike']
Есть более безопасный анализатор строк, но я не буду вдаваться в подробности.
0,Red,2,"['Ben', 'Mike']"
без кавычек, читатель будет иметь проблемы, так как он будет видеть разделитель в скобках. Простой читатель numpy.genfromtxt
может даже обрабатывать эти цитаты. Простые читатели просто используют line_list = line.split(delimiter)
, получая список строк, по одной для каждого «столбца».
Я полагаю, что читатели в модуле csv
могут быть проинструктированы для обработки вложенных кавычек, и, возможно, даже вложенные скобки.