Создание словаря из файла csv?
Я пытаюсь создать словарь из файла CSV. Первый столбец csv-файла содержит уникальные ключи, а второй столбец содержит значения. Каждая строка csv-файла представляет собой уникальный ключ, пару значений в словаре. Я пытался использовать csv.DictReader и csv.DictWriter классов, но я могу только выяснить, как создать новый словарь для каждой строки. Мне нужен один словарь. Вот код, который я пытаюсь использовать:
import csv
with open('coors.csv', mode='r') as infile:
reader = csv.reader(infile)
with open('coors_new.csv', mode='w') as outfile:
writer = csv.writer(outfile)
for rows in reader:
k = rows[0]
v = rows[1]
mydict = {k:v for k, v in rows}
print(mydict)
когда я запускаю приведенный выше код я получаю ValueError: too many values to unpack (expected 2). Как создать один словарь из файла csv? Спасибо.
10 ответов:
Я считаю, что синтаксис, который вы искали следующим образом:
with open('coors.csv', mode='r') as infile: reader = csv.reader(infile) with open('coors_new.csv', mode='w') as outfile: writer = csv.writer(outfile) mydict = {rows[0]:rows[1] for rows in reader}поочередно, для python
mydict = dict((rows[0],rows[1]) for rows in reader)
import csv reader = csv.reader(open('filename.csv', 'r')) d = {} for row in reader: k, v = row d[k] = v
откройте файл, вызвав open, а затем
csv.DictReader.input_file = csv.DictReader(open("coors.csv"))вы можете перебирать строки csv-файла dict reader объекта путем перебора input_file.
for row in input_file: print rowили Чтобы получить доступ только к первой строке
dictobj = csv.DictReader(open('coors.csv')).next()
вы должны просто конвертировать csv.читатель диктует:
~ >> cat > 1.csv key1, value1 key2, value2 key2, value22 key3, value3 ~ >> cat > d.py import csv with open('1.csv') as f: d = dict(filter(None, csv.reader(f))) print(d) ~ >> python d.py {'key3': ' value3', 'key2': ' value22', 'key1': ' value1'}
вы также можете использовать numpy для этого.
from numpy import loadtxt key_value = loadtxt("filename.csv", delimiter=",") mydict = { k:v for k,v in key_value }
это не элегантное, но однолинейное решение с использованием панд.
import pandas as pd pd.read_csv('coors.csv', header=None, index_col=0, squeeze=True).to_dict()Если вы хотите указать dtype для вашего индекса (он не может быть указан в read_csv, если вы используете аргумент index_col из-за ошибка):
import pandas as pd pd.read_csv('coors.csv', header=None, dtype={0: str}).set_index(0).squeeze().to_dict()
Я бы предложил добавить
if rowsесли в конце файла есть пустая строкаimport csv with open('coors.csv', mode='r') as infile: reader = csv.reader(infile) with open('coors_new.csv', mode='w') as outfile: writer = csv.writer(outfile) mydict = dict(row[:2] for row in reader if row)
Если вы в порядке с использованием пакета numpy, то вы можете сделать что-то вроде следующего:
import numpy as np lines = np.genfromtxt("coors.csv", delimiter=",", dtype=None) my_dict = dict() for i in range(len(lines)): my_dict[lines[i][0]] = lines[i][1]
вы можете использовать это, это очень здорово:
import dataconverters.commas as commas filename = 'test.csv' with open(filename) as f: records, metadata = commas.parse(f) for row in records: print 'this is row in dictionary:'+rowenter code here
однострочное решение
import pandas as pd dict = {row[0] : row[1] for _, row in pd.read_csv("file.csv").iterrows()}
Comments