下面的代码出错了,openpyxl
,我不确定为什么:
Zip = zip_code.group(0)[:6]
title_column_name = "Member Address Line 3"
ws = config.workbook.active
for row in ws.rows[1:]: # errors out here
if row[1].value.find(Zip) != -1:
print("Found a matching row! MovieId={0}, Title={1}".format(row[0].value, row[1].value))
下面是输出错误:
for row in ws.rows[1:]:
TypeError: 'generator' object is not subscriptable
我只是想获取我成功收集的Zip
值,并获取找到它的行。然后我最终想获得该行的列值。
你的 ws.rows是一个不可下标的生成器。
为了切片它,你可以采取几种方法。
itertools.islice是一个很好的方法。
import itertools
...
<your setup code>
....
for row in itertools.islice(ws.rows, 1, None):
....
"Now you have skipped the first item"
其他选项可能是使用枚举并在索引为 0 时继续,或者在进入循环之前使用 next 跳过第一个。
错误非常简单:wc.rows
不是列表(或支持__getitem__
的东西),而是一个生成器。所以问题是,你如何跳过第一个元素?请改用itertools.islice
。
from itertools import islice
...
for row in islice(ws.rows, 1, None):
与['a', 'b', 'c', 'd'][slice(1,None)]
相比,相当于['a', 'b', 'c', 'd'][1:]
。