Лучший способ конвертировать данные CSV в DICT - PullRequest
17 голосов
/ 05 марта 2010

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

Спасибо

Ответы [ 3 ]

28 голосов
/ 05 марта 2010
import csv

reader = csv.DictReader(open('myfile.csv'))
for row in reader:
    # profit !
16 голосов
/ 05 марта 2010

Использование csv.DictReader :

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

0 голосов
/ 14 декабря 2017

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...