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

我仍然需要在迭代器循环中继续从Excel和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' 

我只是无法find如何去做。

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

 myrange = iter(range(insheet.rows)) for r in myrange: ... next(myrange) 

当然,这个range在Python 3中是这样工作的。如果仍然在Python 2下,它将是xrange

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

 r = next(myrange) 

您还应该介绍在提高range时可能会引起的潜在的StopIterationexception

rrange()一个整数,而不是一个迭代器,所以你不能在它上面调用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