Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.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 如何在迭代器电子表格行中推进迭代_Python_Excel_Iteration_Xlrd - Fatal编程技术网

Python 如何在迭代器电子表格行中推进迭代

Python 如何在迭代器电子表格行中推进迭代,python,excel,iteration,xlrd,Python,Excel,Iteration,Xlrd,我需要在迭代器循环中推进从excel电子表格读取的行的迭代 try: for r in range(insheet.nrows): cdat = insheet.cell(r, 0).value if not cdat == xlrd.empty_cell.value: if hasNumbers(cdat): #Strip digits to get Client pneumonic

我需要在迭代器循环中推进从excel电子表格读取的行的迭代

try:
    for r in range(insheet.nrows):
        cdat = insheet.cell(r, 0).value
        if not cdat == xlrd.empty_cell.value:
            if hasNumbers(cdat):
                #Strip digits to get Client pneumonic
                #pdb.set_trace()
                if re.sub(r'\d','',cdat) == CLNTID:
                    #pdb.set_trace()
                    #This call belongs to this client
                    memId = cdat
                    fInCallBlock = True
                    while fInCallBlock:
                        #Output this line formatted as CallHeader
                        #Inc row counter
    Can't do this ==>   next(r)
                        cdat = cdat.strip(insheet.cell(r, 0).value) 
                        if cdat == u"Call Resolved":
                            pdb.set_trace()
                            fInCallBlock = False
代码在标记为以下内容时崩溃:

-> next(r)
(Pdb++) n
TypeError: 'int object is not an iterator'

我就是不知道怎么做。

您可以将
范围
指定给一个变量,然后将其推进

myrange = iter(range(insheet.rows))

for r in myrange:

    ...
    next(myrange)
当然,在Python3中,
range
就是这样工作的。如果仍在Python2下,它将是
xrange

请注意,
r
值不会更改,除非您不仅推进迭代器,而且还将迭代器的输出分配给
r

r = next(myrange)

您还应该注意,在推进
范围时可能引发的潜在
停止迭代
异常

r
范围()
中的整数,而不是迭代器,因此您不能对其调用
下一步()

您可以使用带计数器的
while
循环,而不是
for
循环:

try:
    r = 0
    while r < insheet.nrows:
        cdat = insheet.cell(r, 0).value
        if not cdat == xlrd.empty_cell.value:
            if hasNumbers(cdat):
                #Strip digits to get Client pneumonic
                #pdb.set_trace()
                if re.sub(r'\d','',cdat) == CLNTID:
                    #pdb.set_trace()
                    #This call belongs to this client
                    memId = cdat
                    r += 1
                    while r < insheet.nrows:
                        #Output this line formatted as CallHeader
                        cdat = cdat.strip(insheet.cell(r, 0).value) 
                        if cdat == u"Call Resolved":
                            break
                        #Inc row counter
                        r += 1
        r += 1
试试看:
r=0
当r
在python 2中
xrange
不是迭代器,您必须明确地将其定义为
myrange=iter(xrange(insheet.rows))
另外,您确定
range
在python 3中是迭代器吗?我在这台机器上只有Python2,所以我无法测试它,但我认为您还需要将它定义为Python3(3.4.2)中的类似问题:必须在
iter()中包装
range()