将CSV转换成python中的词典列表

问题描述

我得到了一个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'}]

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...