将csv数据转换为dict的最佳方法

时间:2010-03-05 15:11:29

标签: python csv

我的csv文件包含以下数据

val1,val2,val3
1,2,3
22,23,33

那么如何将数据转换为dict

dict1 = { 'val1': 1, 'val2': 2, 'val3': 3}
dict2 = { 'val1': 22, 'val2': 23, 'val3': 33}
fp = open('file.csv', 'r')
reader = csv.reader(fp)
for row in reader:
    ????

由于

5 个答案:

答案 0 :(得分:27)

import csv

reader = csv.DictReader(open('myfile.csv'))
for row in reader:
    # profit !

答案 1 :(得分:16)

使用csv.DictReader

  

创建一个像常规阅读器一样操作的对象,但将读取的信息映射到一个dict,其键由可选的 fieldnames 参数给出。 fieldnames 参数是sequence,其元素按顺序与输入数据的字段相关联。这些元素成为结果字典的关键。如果省略 fieldnames 参数, csvfile 第一行中的值将用作 fieldnames 。如果读取的行包含的字段多于字段名序列,则剩余数据将添加为由 restkey 的值键入的序列。如果读取的行的字段数少于字段名序列,则其余的键将采用可选 restval 参数的值。任何其他可选或关键字参数都将传递给基础reader实例...

答案 2 :(得分:2)

通常我想在处理CSV时升级到熊猫。它为您提供了一个全新的可能性。

import pandas as pd
df=pd.read_csv('test.csv')
for index, row in df.iterrows():
    d=row.to_dict()
    print(d)

print("")

print( df[df.val3>10].iloc[0].to_dict() )
print( list(df[['val3']]['val3']) )

输出:

{'val1': 1, 'val2': 2, 'val3': 3}
{'val1': 22, 'val2': 23, 'val3': 33}

{'val1': 22, 'val2': 23, 'val3': 33}
[3, 33]

答案 3 :(得分:0)

使用&csv'很酷的事情。正如在其他答案中提到的那样,它可以用于读取文件(明显的用例),但也可以解析常规的csv格式化字符串。

读取csv文件的示例:

import csv
with open('my_file.csv') as f:
   for line in csv.DictReader(f, fieldnames=('val1', 'val2', 'val3')):
      print(line)

请注意,您可以显式传递您想要成为密钥的标头,从而可以非常轻松地使用没有标头的csv文件。

另一个用例是使用' csv'

读取常规字符串

示例:

import csv
my_csv_string = 'val1, val2, val3'
my_csv_dict = next(csv.DictReader(StringIO(s), fieldnames=('key1', 'key2', 'key3')))

无论如何,csv.DictReader()就是你需要的......

答案 4 :(得分:0)

使用此代码将您的 csv 转换为您问题中要求的字典

import csv
with open('data.csv') as file:
    for i in csv.DictReader(file):
        print (dict(i))