【发布时间】:2021-01-28 23:32:14
【问题描述】:
我有一个 CSV 文件,其中第一行是标题,然后其他行是列中的数据。
我正在使用 python 将这些数据解析到字典列表中
通常我会使用以下代码:
def csv_to_list_of_dictionaries(file):
with open(file) as f:
a = []
for row in csv.DictReader(f, skipinitialspace=True):
a.append({k: v for k, v in row.items()})
return a
但由于一列中的数据存储在字典中,因此此代码不起作用(它分隔了此字典中的键:值对
所以我的 csv 文件中的数据如下所示:
col1,col2,col3,col4
1,{'a':'b', 'c':'d'},'bla',sometimestamp
由此创建的字典如下:{col1:1, col2:{'a':'b', col3: 'c':'d'}, col4: 'bla'}
我希望得到的结果是:{col1:1, col2:{'a':'b', 'c':'d'}, col3: 'bla', col4: sometimestamp}
【问题讨论】:
-
关于 CSV 的标准并不多,但您的输入看起来有问题。如果您想在单个列中包含逗号,最常见的解决方案是引用整个值,例如
1,"{'a':'b', 'c':'d'}",'bla',sometimestamp。您也许可以告诉csv模块将大括号视为引号,但修复源代码也值得考虑。 -
我认为
quotechar只能是单个字符;您将无法执行csv.DictReader(f, quotechar="{}")之类的操作。实际上,这也不是您想要的,因为大括号应该是解析结果的一部分。你能预处理文件并将{替换为"{和}替换为}"吗?
标签: python list csv dictionary