2016-04-11 3 views
1

То, что я пытаюсь сделать, это взять файл csv с несколькими строками и столбцами данных и сделать упорядоченный словарь, который я могу вызвать и повторить позже.Создание OrderedDict из файла csv

Это то, что он выглядит, когда я открываю и распечатать файл CSV в моей оболочке Python:

"csv printed"

А вот код, я сейчас и играю с в оболочке:

from collections import OrderedDict 

aDict = OrderedDict() 
order = next(csv.reader(file))[1:] 
file.seek(0) 
csvReader = csv.DictReader(file) 
for row in csvReader: 
    key = row.pop("key") 
    aDict[key] = OrderedDict((k, row[k]) for k in order) 

"my unworking code"

Я хочу, чтобы итерации по каждой строке и записать словарь с ключами быть даты и значения как список других значений в каждом столбце.

Ex: { "12/12/1980": [28.75,28.87,28.75,28.75,2093900.0,0.0,1.0]}

+0

Я хотел бы предложить вам добавить код как обычный текст в вашем вопросе, так что люди могут скопировать и вставьте его, чтобы они могли запустить его и попытаться исправить. – eestrada

ответ

2

Я не знаю, почему вы пытаетесь pop ключи от из словарь и элементы из списка. Кажется, это не служит вашей цели создания OrderedDict.

Это решение, к которому я пришел. Он не выдает никаких предметов (опять же, потому что я точно не знаю, почему вы это делаете).

import csv 
from collections import OrderedDict 

file = open('example.csv', mode='r') 

csvReader = csv.reader(file) 

# get rid of header row 
header = next(csvReader) 
# print(header) 

odict = OrderedDict() 
for row in csvReader: 
    odict[row[0]] = row[1:] 
    # print(row) 

print(odict) 

Это может быть чище и многоразовые, если он помещается в функцию, например, так:

import csv 
from collections import OrderedDict 

def parse_csv(filename): 

    file = open(filename, mode='r') 

    csvReader = csv.reader(file) 

    # get rid of header row 
    header = next(csvReader) 
    # print(header) 

    odict = OrderedDict() 
    for row in csvReader: 
     odict[row[0]] = row[1:] 
     # print(row) 

    return odict 

parse_csv('example.csv')