Python Openpyxl如何通过索引从工作表中获取行

Python Openpyxl如何通过索引从工作表中获取行,python,excel,indexing,openpyxl,Python,Excel,Indexing,Openpyxl,使用Openpyxl和python3.5,我尝试使用下标从excel工作表中获取第一行,但我发现了一个错误 # after getting filename # after loading worksheet # to get the first row of the worksheet first_row = worksheet.rows[0] # I get Traceback (most recent call last): File "<pyshell#54>

使用Openpyxl和python3.5,我尝试使用下标从excel工作表中获取第一行,但我发现了一个错误

# after getting filename
# after loading worksheet
# to get the first row of the worksheet
first_row = worksheet.rows[0]

# I get 
Traceback (most recent call last):
      File "<pyshell#54>", line 1, in <module>
      first_row = phc_th_sheet.rows[1]
TypeError: 'generator' object is not subscriptable
获取文件名后 #加载工作表后 #获取工作表的第一行的步骤 第一行=工作表。行[0] #我明白了 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 第一行=phc第页。行[1] TypeError:“生成器”对象不可下标 关于第一排,我也试过了 第一行=工作表。(第行=1) #及 第一行=工作表。行[:1]

没有一个奏效。有什么建议吗?openpyxl中是否没有该功能?
我已经阅读了位于的文档,但是我发现没有什么足够的帮助来索引和选择行

错误
TypeError:“generator”对象不可订阅
。这意味着您正试图通过索引访问一个没有生成器的生成器,因为它会在您迭代时创建元素

您可以轻松解决该问题,将其转换为列表以获得所需的元素:

first_row = list(worksheet.rows)[0]
或迭代行:

for row in worksheet.rows:
    foo(row)
这是因为,即使两者都是可编辑的,列表和生成器的行为也可能完全不同,您可以在这里得到更好的解释:


我终于在文档中找到了答案:

first_row = worksheet[1]
# worksheet[row_index_from_1]

这对我很有用。

是的,我们将
ws.rows
转换成了一个生成器,这样不同实现之间的行为将是一致的,同时也鼓励这种语法用于特殊查询。编程访问最好使用
ws.iter\u rows()
以及在可能的情况下使用
ws.iter\u cols()
。这是现在的工作表.rows[1]。正在更新答案。@charlichtlark在
rows
变量成为生成器之后,我们现在还有办法按索引访问行吗?@BenLiyanage:我已经回滚了您的编辑。我怀疑您使用的是较旧版本的
openpyxl
<代码>工作表。行是一个生成器,因此
工作表。行[1]
不起作用。如果版本很重要,请在答案中指定它好吗?谢谢你让答案保持新鲜!我再也不能访问这个代码库了,所以我不知道我使用的是什么版本。这在文档中有介绍。这不是一个很好的答案。最好直接获取行,而不是显式地将迭代器转换为列表。但是,由于我通常使用pandas操作excel电子表格,而且我不熟悉openpyxl的内部结构,所以我只是试图解释错误以及如何找到解决方法。@BenLiyanage问题是你不能,因为该方法现在是一个生成器。list方法模拟直接访问行。请注意,它首先将所有数据拉入内存。与DOM和StaX注意事项一样,如果您有一个大的数据集,您将需要使用第二个示例进行迭代=D快乐的猎虫家伙!我理解@ebt的解释生成器,但我仍然无法理解如何使用答案中的“第二个示例”访问第n行。