Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python csv阅读器-迭代时将for行上的字符串转换为int_Python - Fatal编程技术网

python csv阅读器-迭代时将for行上的字符串转换为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

我感兴趣的是不必将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,其中键是一个元组,而不是嵌套的字典,是否会更好,但即使如此,我仍然对解决我的问题感兴趣

您想要的是:

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。是啊,蟒蛇也很酷。