У меня ошибка:
NameError: name 'sheet' не определен. Я хочу синтаксический анализ и печать содержимого.
Мои коды:
class ReadData():
def __init__(self, sheet_path):
self.book = xlrd.open_workbook(sheet_path)
self.sheet = self.book.sheet_by_index(1)
self.companies = []
def read(self):
for row_index in range(2, sheet.nrows):
rows = sheet.row_values(row_index)
print(rows)
x = ReadData('./data/excel1.xlsx')
x.read()
Я действительно не могу понять, почему эта ошибка возникает. Должен ли я добавить что-то, чтобы использовать init? Как я могу это исправить?
Вы должны использовать self.sheet
вместо простого sheet
. Поэтому обновите свой метод как
def read(self):
# ------------------------v
for row_index in range(2, self.sheet.nrows):
#---------v
rows = self.sheet.row_values(row_index)
print(rows)
в функции чтения нет определенного листа. вы должны использовать self.sheet.nrows
Сама ошибка говорит о том, что он не может найти sheet
атрибутов в вашем методе read()
. Вы использовали sheet
в двух местах: 1: В for
циклы range
2: В первой строке for
цикла.
Если вы хотите использовать любой атрибут внутри любого метода в python
, то это может быть только переменная класса или локальная переменная или переменная экземпляра или некоторый импортированный атрибут.
class variable
или class variable
instance variable
можно получить через self
.
В вашем случае sheet
представляет собой instance variable
и, следовательно, ее можно получить только с помощью self
.
Поэтому, если вы измените эти два вхождения sheet
на self.sheet
, это сработает.
Вот ваш исправленный код
class ReadData(object):
def __init__(self, sheet_path):
self.book = xlrd.open_workbook(sheet_path)
self.sheet = self.book.sheet_by_index(1)
self.companies = []
def read(self):
for row_index in range(2, self.sheet.nrows):
rows = self.sheet.row_values(row_index)
print(rows)
x = ReadData('./data/excel1.xlsx')
x.read()
Попробуй это
class ReadData():
def __init__(self, sheet_path):
self.book = xlrd.open_workbook(sheet_path)
self.sheet = self.book.sheet_by_index(1)
self.companies = []
def read(self):
for row_index in range(2, self.sheet.nrows):
rows = self.sheet.row_values(row_index)
print(rows)
x = ReadData('./data/excel1.xlsx')
x.read()
Я добавил self.
впереди sheet
по строке 8
self
в еще одном месте вrange