【问题标题】:TypeError: 'generator' object is not subscriptable in pythonTypeError:“生成器”对象在 python 中不可下标
【发布时间】:2018-06-26 13:21:48
【问题描述】:

我是python新手,正在努力学习。

我正在使用下面的代码来读取 excel 电子表格,但出现以下错误。 谁能帮我解决这个问题?或者代码有什么问题。

import openpyxl   
import os

if not os.path.isfile('C:\Python\Python36\EBC_N_Bhatt_Anilkumar _Team - 06132018.xlsx'):
    raise Exception('File does not exist.')

wb = openpyxl.load_workbook('C:\Python\Python36\EBC_N_Bhatt_Anilkumar _Team - 06132018.xlsx')    

sheet_ind = 0

sheet_names = wb.get_sheet_names()

sheet = wb.get_sheet_by_name(sheet_names[sheet_ind])

r = sheet.max_row

c = sheet.max_column

start_row = 0

for i in range(start_row, r):

cur_row = list(sheet.rows[i])

print(cur_row)

"C:\Users\KVenkataraja\PycharmProjects\Python 教程\venv\Scripts\python.exe" “C:/Users/KVenkataraja/PycharmProjects/Python 教程/readexel.py” C:/Users/KVenkataraja/PycharmProjects/Python 教程/readexel.py:9: DeprecationWarning:调用已弃用的函数 get_sheet_names(使用 wb.sheetnames)。 sheet_names = wb.get_sheet_names() C:/Users/KVenkataraja/PycharmProjects/Python 教程/readexel.py:10: DeprecationWarning:调用已弃用的函数 get_sheet_by_name(使用 wb[工作表名称])。 sheet = wb.get_sheet_by_name(sheet_names[sheet_ind]) Traceback(最近一次通话最后一次):文件 "C:/Users/KVenkataraja/PycharmProjects/Python 教程/readexel.py", 第 18 行,在 cur_row = list(sheet.rows[i])

TypeError: 'generator' 对象不可下标

进程以退出代码 1 结束

【问题讨论】:

  • sheet.rows 是一个生成器,你不能像这样要求ith 行。你的意思是list(sheet.rows)[i]

标签: python-3.x


【解决方案1】:

sheet.rows 可能(如您的错误消息所示)是行生成器,这就是它不可下标的原因。您应该遍历生成器sheet.rows

你可以并且应该像下面的代码 sn-p 那样迭代它:

for row in sheet.rows:
    cur_row = list(row)
    print(cur_row)

或者如果你也想要索引,那么使用enumerate

for index, row in enumerate(sheet.rows):
    cur_row = list(row)
    print(cur_row)
    # print(index)

【讨论】:

  • 为什么?没有解释
  • @AzatIbrakov 是的,我只是在编辑我的答案:) 觉得它需要一些解释。
猜你喜欢
  • 2020-08-18
  • 1970-01-01
  • 1970-01-01
  • 2019-02-10
  • 1970-01-01
  • 1970-01-01
  • 2021-12-14
  • 2023-03-20
  • 2015-07-31
相关资源
最近更新 更多