对于 ws.rows[1:] 中的行:类型错误:'generator'对象不可下标



下面的代码出错了,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:]

最新更新