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

2024-09-24 22:31:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要在迭代器循环中推进从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

代码在标记为以下内容时崩溃:

^{pr2}$

我就是不知道怎么做。在


Tags: toforifvaluetracecellthisexcel
2条回答

您可以将range分配给一个变量,然后将其推进

myrange = iter(range(insheet.rows))

for r in myrange:

    ...
    next(myrange)

当然,range在python3中是这样工作的。如果仍然在python2下,它将是xrange

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

^{pr2}$

您还应该处理潜在的StopIteration异常,该异常可能在推进range时引发

r是来自range()的整数,不是迭代器,因此不能对其调用next()。在

您可以使用带计数器的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

相关问题 更多 >