Python 如何在迭代器电子表格行中推进迭代
我需要在迭代器循环中推进从excel电子表格读取的行的迭代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
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()
。