python csv阅读器-迭代时将for行上的字符串转换为int
我感兴趣的是不必将int函数映射到我目前拥有的字符串元组。请参见我的示例的最后一部分:python csv阅读器-迭代时将for行上的字符串转换为int,python,Python,我感兴趣的是不必将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.rea
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,其中键是一个元组,而不是嵌套的字典,是否会更好,但即使如此,我仍然对解决我的问题感兴趣 您想要的是:
def int_wrapper(reader):
for v in reader:
yield map(int, v)
您的代码将如下所示:
reader = csv.reader(individualFile,dialect)
reader = int_wrapper(reader)
# all that other stuff
for m, f, s, g, a, c, t in reader:
try:
census[m][f][s][g][a][c] += t
except:
print "error"
print m, f, s, g, a, c, t
break
这只是使用生成器函数包装读取器并将输入转换为整数
TypeError
的起源是reader
是一个生成函数,它生成值列表。当您将map
应用于它时,您正在将map
应用于列表的“列表”。这不同于将map
应用到一个值列表,而您在长时间编写它时会这样做
为了举例说明,另一种方法是
for m, f, s, g, a, c, t in (map(int, v) for v in reader):
# code
这只是使用原位生成器表达式,而不是定义函数。这是品味的问题。这太棒了。我只是在读发电机,这有助于我更好地理解它们!很抱歉表现得像个彻头彻尾的noob/fanboy,但我刚刚开始学习python,它真是太棒了。@oob。别担心。我可以使用我能得到的所有风扇。哦,等等……你刚才说的是python。是啊,蟒蛇也很酷。