Ответ 1
import csv
reader = csv.DictReader(open('myfile.csv'))
for row in reader:
# profit !
У меня есть файл 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:
????
Спасибо
import csv
reader = csv.DictReader(open('myfile.csv'))
for row in reader:
# profit !
Используйте csv.DictReader:
Создайте объект, который работает как обычный читатель, но отображает информацию, считываемую в dict, ключи которой задаются необязательным параметром fieldnames. Параметр fieldnames является
sequence
, элементы которого связаны с полями входных данных в порядке. Эти элементы становятся ключами результирующего словаря. Если параметр fieldnames опущен, значения в первой строке csvfile будут использоваться в качестве имен полей. Если чтение строки имеет больше полей, чем последовательность имен полей, остальные данные добавляются как последовательность, определяемая значением ключа restkey. Если в считываемом столбце меньше полей, чем в последовательности имен полей, остальные ключи принимают значение необязательного параметра restval. Любые другие необязательные или ключевые аргументы передаются в базовыйreader
экземпляр...
Прохладная вещь с использованием "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()" - это то, что вам нужно.