问题描述
我得到了一个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
但是因为一列中的数据存储在字典中,所以此代码不起作用(它将字典中的key:value对分开
所以我的csv文件中的数据如下:
col1,col2,col3,col4
1,{'a':'b','c':'d'},'bla',sometimestamp
由此创建的词典是这样的:{col1:1,col2:{'a':'b',col3: 'c':'d'},col4: 'bla'}
我希望得到的是:{col1:1,col3: 'bla',col4: sometimestamp}
解决方法
不要使用csv模块,使用正则表达式从每一行提取字段。然后从提取的行中制作字典。
示例文件:
col1,col2,col3,col4
1,{'a':'b','c':'d'},'bla',sometimestamp
2,sometimestamp
3,sometimestamp
4,sometimestamp
5,sometimestamp
6,sometimestamp
。
import re
pattern = r'^([^,]*),({.*}),([^,]*)$'
regex = re.compile(pattern,flags=re.M)
def csv_to_list_of_dictionaries(file):
with open(file) as f:
columns = next(f).strip().split(',')
stuff = regex.findall(f.read())
a = [dict(zip(columns,values)) for values in stuff]
return a
stuff = csv_to_list_of_dictionaries(f)
In [20]: stuff
Out[20]:
[{'col1': '1','col2': "{'a':'b','c':'d'}",'col3': "'bla'",'col4': 'sometimestamp'},{'col1': '2',{'col1': '3',{'col1': '4',{'col1': '5',{'col1': '6','col4': 'sometimestamp'}]