2015-11-08 3 views
0

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

'''"YEAR","GENDER","NAME","COUNT" 
    "2011","FEMALE","A","100" 
    "2012","FEMALE","A","50" 
    "2012","FEMALE","B","10" 
    "2012","FEMALE","C","10" 
    "2012","FEMALE","D","5" 
    "2013","FEMALE","A","1000" 
    ''' 

Чтобы что-то вроде этого:

{('B', 'FEMALE'): {2012: (10, None)}, 
('C', 'FEMALE'): {2012: (10, None)}, 
('A', 'FEMALE'): {2011: (100, None), 
        2012: (50, None), 
        2013: (1000, None)}, 
('D', 'FEMALE'): {2012: (5, None)}} 

Но мне нужно, чтобы сделать это без импорта ничего, поэтому я не могу использовать модуль CSV. И это общий пример; Мне нужен код для работы в нескольких случаях, которые могут быть длиннее или короче этого.

(Есть 11 файлов всего, это является одним из них, и здесь текст именно так, как она находится в файле:

"YEAR","GENDER","NAME","COUNT" 
    "2011","FEMALE","A","100" 
    "2012","FEMALE","A","50" 
    "2012","FEMALE","B","10" 
    "2012","FEMALE","C","10" 
    "2012","FEMALE","D","5" 
    "2013","FEMALE","A","1000" 
+2

, если вы не возражаете, я спрашиваю, почему может вы не импортируете что-нибудь? –

ответ

1
answer = {} 
with open('path/to/file') as infile: 
    infile.readline() # we don't care about the header row 
    for line in infile: 
     year, gender, name, count = (s.strip('"') for s in line.split(',')) 
     key = (name, gender) 
     if key not in answer: answer[key] = {} 
     answer[key][int(year)] = (int(count), None) 
+0

Почему downvote? – inspectorG4dget

+0

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

+0

@ jtdurb96: если вы может показать мне вашу ошибку, я был бы счастлив обновить свой ответ – inspectorG4dget

Смежные вопросы