2015-05-23 3 views
0

Как печатать элементы из файла csv с использованием raw_input?Печать элементов из файла csv с использованием raw_input

Код:

import csv 

inputYear = raw_input('Please enter the year: ') 
inFile = open('babyQldAll.csv', 'rU') 
cvsFile = csv.reader(inFile, delimiter=',') 

dict = {} 

for row in cvsFile: 
    year, name, count, gender = row 

    if (year == inputYear) and (gender == 'Boy'): 
     dict[name] = count 

     print('Popular boy names in year %s are:' % inputYear) 

# According to informaiton in 'dict', print (name, count) sorted by 'name' in alphabetical order   

print("Print boy names... ")  
inFile.close() 

Желаемый результат:

Популярные имена мальчика в 2010 году являются: Айдан 112 Эйден 168 Alex 93

+0

Пожалуйста, помечать это как python2.7, так как Python 3 не имеет 'raw_input()'. – Olaf

+0

Можете ли вы дать образец содержимого файла? – shruti1810

+0

2010, John, 124, Мужчина/n 2010, Amy, 111, Female – RelientFX

ответ

0

Есть много возможных способов сделать это.
Один из них - построить диктофон, где годами являются ключи, а значения - список списков, например [[John, 124, Male], [Amy, 111, Female]] i.e пары, указывающие имя, счет и пол. Вы можете создать полный словарь, а затем получить значения для каждого года:

import csv 

inputYear = raw_input('Please enter the year: ') 
inFile = open('babyQldAll.csv', 'rU') 
cvsFile = csv.reader(inFile, delimiter=',') 

dict = {} 

for row in cvsFile: 
    year, name, count, gender = row 

    if dict.get(year, None): #If key in dict already 
     dict[year].append([name, count, gender]) 
    else: #else, create the key 
     dict[year] = [[name, count, gender]] 

data = ", ".join(" ".join(z) for z in dict.get(inputYear,[]) if z[3]=='Male') 
if len(data): 
    print 'Popular boy names in {} are: {}'.format(inputYear, data) 

inFile.close() 
+0

Чтобы проверить, есть ли ключ в словаре, вы также можете использовать: if year in dict : –

+0

@AlexandruGodri yep – RafaelC

+0

Я знаю, что мне не обязательно менять код, который у меня есть, я просто не могу запомнить команды для печати (имя, счет) и отсортировано по имени в алфавитном порядке – RelientFX

0

Вы можете попробовать это: (?)

inputYear = raw_input('Please enter the year: ') 

file1 = open('babyQldAll.csv','r') 
fileContent = file1.readlines() 
fileRows = fileContent[0].split("\\n") 

dict = {} 
for row in fileRows: 
    year = row.split(',')[0].strip() 
    name = row.split(',')[1].strip() 
    count = row.split(',')[2].strip() 
    gender = row.split(',')[3].strip() 
    if (year == inputYear) and (gender == 'Boy'): 
     dict[name] = count 
odDict = sorted(dict.items()) 
str = '' 
for i in odDict: 
    str = str + i[0] + ' ' + i[1] + ' ' 

print('Popular boy names in year '+ inputYear + ' are: ' + str) 
file1.close() 
+0

Код не выводит никаких имен ...? – RelientFX

+0

Это дает выход для меня. Какую версию python вы используете? 2.7 право? – shruti1810

+0

Можете ли вы поставить 'print fileRows' чуть выше' dict = {} 'и' print year, gender' чуть выше 'if (year == inputYear) и (gender == 'Boy'):' и дайте мне знать, что вы получаете на выходе? – shruti1810

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