我找了很长时间才遇到类似的问题,却找不到一个。
当我用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类可以很好地生成字典,但它不能使用这种格式)
答案 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)