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

las*_*pal 18 python csv

我有csv文件包含以下数据

val1,val2,val3
1,2,3
22,23,33
Run Code Online (Sandbox Code Playgroud)

那么如何将数据转换为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:
    ????
Run Code Online (Sandbox Code Playgroud)

谢谢

Jim*_*mmy 30

import csv

reader = csv.DictReader(open('myfile.csv'))
for row in reader:
    # profit !
Run Code Online (Sandbox Code Playgroud)


S.L*_*ott 16

使用csv.DictReader:

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


Aar*_*_ab 5

正如其他答案中提到的,使用“csv”的最酷的事情是它可以用于读取文件(明显的用例),但也可以解析常规的 csv 格式的字符串。

读取 csv 文件的示例:

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

请注意,您可以显式传递您想要作为键的标头,从而可以轻松使用没有标头的 csv 文件。

另一个用例是仅读取带有“csv”的常规字符串

例子:

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

不管怎样,csv.DictReader()就是你需要的..