簡體   English   中英

將csv轉換為python中的字典列表

[英]Convert csv into list of dictionaries in 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

但是因為一列中的數據存儲在字典中,所以這段代碼不起作用(它將字典中的鍵:值對分開

所以我的 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 模塊使用正則表達式從每一行中提取字段。 然后從提取的行中制作字典。

示例文件:

col1,col2,col3,col4
1,{'a':'b', 'c':'d'},'bla',sometimestamp
2,{'a':'b', 'c':'d'},'bla',sometimestamp
3,{'a':'b', 'c':'d'},'bla',sometimestamp
4,{'a':'b', 'c':'d'},'bla',sometimestamp
5,{'a':'b', 'c':'d'},'bla',sometimestamp
6,{'a':'b', 'c':'d'},'bla',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',
  'col2': "{'a':'b', 'c':'d'}",
  'col3': "'bla'",
  'col4': 'sometimestamp'},
 {'col1': '3',
  'col2': "{'a':'b', 'c':'d'}",
  'col3': "'bla'",
  'col4': 'sometimestamp'},
 {'col1': '4',
  'col2': "{'a':'b', 'c':'d'}",
  'col3': "'bla'",
  'col4': 'sometimestamp'},
 {'col1': '5',
  'col2': "{'a':'b', 'c':'d'}",
  'col3': "'bla'",
  'col4': 'sometimestamp'},
 {'col1': '6',
  'col2': "{'a':'b', 'c':'d'}",
  'col3': "'bla'",
  'col4': 'sometimestamp'}]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM