Лучший способ конвертировать данные csv в dict

У меня есть файл 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:
    ????

Спасибо

Ответы

Ответ 1

import csv

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

Ответ 2

Используйте csv.DictReader:

Создайте объект, который работает как обычный читатель, но отображает информацию, считываемую в dict, ключи которой задаются необязательным параметром fieldnames. Параметр fieldnames является sequence, элементы которого связаны с полями входных данных в порядке. Эти элементы становятся ключами результирующего словаря. Если параметр fieldnames опущен, значения в первой строке csvfile будут использоваться в качестве имен полей. Если чтение строки имеет больше полей, чем последовательность имен полей, остальные данные добавляются как последовательность, определяемая значением ключа restkey. Если в считываемом столбце меньше полей, чем в последовательности имен полей, остальные ключи принимают значение необязательного параметра restval. Любые другие необязательные или ключевые аргументы передаются в базовый reader экземпляр...

Ответ 3

Прохладная вещь с использованием "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()" - это то, что вам нужно.