从csv创建字典,只有1列中的所有数据

时间:2017-09-25 07:35:00

标签: python csv dictionary

我找了很长时间才遇到类似的问题,却找不到一个。

当我用Excel打开某个csv文件时,每行的数据被打包在一个以“;”分隔的单元格中而不是多个细胞。第一行是字符串列表,所有其他行是整数。我想用第一行(字符串列表)作为标题用Python创建一个字典。 csv文件如下所示。我从机器学习数据库datafile site

下载了该文件
     col1
row1 "x";"y";"z"
row2 1;2;3
row3 4;5;6

当我使用代码时

import csv

new_list = []
with open(file) as f:
    reader = csv.DictReader(f)
    for row in reader:
        new_list.append(row)

print(new_list)

我最终得到了

{'"x";"y";"z"':'1;2;3'}
{'"x";"y";"z"':'3;4;5'}

而不是

{'"x"':'1','"y"':'2','"z"':'3'}
{'"x"':'4','"y"':'5','"z"':'6'}

如何从这种类型的csv文件中创建字典? (当我在Excel中打开一个csv文件,其中所有数据点都有自己的单元格时,csv.DictReader类可以很好地生成字典,但它不能使用这种格式)

3 个答案:

答案 0 :(得分:2)

只需跳过文件的第一行:

import csv

with open(file) as f:
    next(f, None) # skip first row
    new_list = list(csv.DictReader(f))


print(new_list)

或者,在repl中:

>>> s = """col1
... "x","y","z"
... 1,2,3
... 4,5,6
... """
>>> import io
>>> import csv
>>> f = io.StringIO(s)
>>> next(f)
'col1\n'
>>> list(csv.DictReader(f))
[{'y': '2', 'x': '1', 'z': '3'}, {'y': '5', 'x': '4', 'z': '6'}]
>>>

答案 1 :(得分:0)

使用pandas库:

import io
import pandas as pd

txtfile = u"""col1
"x","y","z"
1,2,3
4,5,6"""

df = pd.read_csv(io.StringIO(txtfile),skiprows=1)
df.T.to_dict().values()

返回:

[{'x': 1, 'y': 2, 'z': 3}, {'x': 4, 'y': 5, 'z': 6}]

答案 2 :(得分:-2)

实际上有多列。 分隔符是逗号,

使用:

reader = csv.reader(f, delimiter=';')

编辑:

您可以编写自己的代码:

with open('myfile.csv','r') as f:
    headers = f.readline().split(';') # First line are headers
    for line in f:
        current_object = dict(zip(headers, line.split(';'))) # create a directory with headers and current line
        print(current_object)