python csv reader - преобразует строку в int в строке for при итерации

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

import os
import csv

filepath =  os.path.normpath("c:/temp/test.csv")

individualFile = open(filepath,'rb')
dialect = csv.Sniffer().sniff(individualFile.read(1000))

individualFile.seek(0)
reader = csv.reader(individualFile,dialect)

names = reader.next()

print names

def buildTree(arityList):
    if arityList == []:
        return 0            
    else:
        tree = {}
        for i in xrange(arityList[0][0],arityList[0][1]+1):
            tree[i] = buildTree(arityList[1:])
        return tree


census = buildTree([(1,12),(1,6),(1,4),(1,2),(0,85),(0,14)])

for m, f, s, g, a, c, t in reader:
    try:
        m,f,s,g,a,c,t = map(int,(m,f,s,g,a,c,t))
        census[m][f][s][g][a][c] += t
    except:
        print "error"
        print m, f, s, g, a, c, t
        break   

Я хочу сделать что-то вроде этого:

for m, f, s, g, a, c, t in map(int,reader):
    try:
        census[m][f][s][g][a][c] += t
    except:
        print "error"
        print m, f, s, g, a, c, t
        break    

Я пробую это и получаю следующую ошибку:

TypeError: int() argument must be a string or a number, not 'list'

У меня проблемы понять это сообщение об ошибке. Я думал, что читатель - это итеративный объект, а не список. Он возвращает список для каждой итерации, но сам по себе это не список, верно? Я думаю, это скорее побочный вопрос. Чего я действительно хочу знаю, есть ли способ сделать то, что я пытаюсь сделать. Извините за код, который на самом деле не имеет отношения, но я подумал, что включу весь свой пример. Не стесняйтесь разорвать его на части! :) Я интересно, может быть, лучше иметь только один dict, где ключ является кортежем, вместо этого вложенного словаря, но даже в этом случае я все еще заинтересован в выяснении моего вопроса.

6
задан oob 12 September 2010 в 02:41
поделиться