python csv reader - konvertiert den String in der for-Zeile in int, wenn @ iteriert wi
Ich bin daran interessiert, dass ich die int-Funktion nicht auf das Tupel von Strings schreiben muss, auf dem ich sie gerade habe. Siehe den letzten Teil meines Beispiels:
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
Was ich tun möchte, ist ungefähr so:
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
Ich versuche dies und erhalte folgende Fehlermeldung:
TypeError: int() argument must be a string or a number, not 'list'
Ich habe Probleme, diese Fehlermeldung zu verstehen. Ich dachte, der Leser sei ein iterables Objekt - keine Liste. Es gibt eine Liste für jede Iteration zurück, aber es selbst ist keine Liste, richtig? Ich denke, das ist eher eine Nebenfrage. Ich möchte wirklich wissen, ob es eine Möglichkeit gibt, das zu tun, was ich versuche. Entschuldigen Sie den Code, der sich nicht wirklich darauf bezieht, aber ich dachte, ich würde mein gesamtes Beispiel einschließen. Fühlen Sie sich frei, es in Stücke zu reißen! :) Ich frage mich, ob es vielleicht besser ist, nur ein Diktat zu haben, in dem der Schlüssel ein Tupel ist, anstatt dieses verschachtelten Wörterbuchmaterials, aber trotzdem bin ich immer noch daran interessiert, meine Frage herauszufinden.