2017-09-15 51 views
-1

我得到了一个错误:NameError:名字“片”没有定义

NameError: name 'sheet' is not defined .I wanna parse excel and print the content.

我写代码:

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() 

我真的不明白为什么这个错误我happens.Should添加的东西用init?我该如何解决这个问题?

回答

1

您应该使用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) 
1

在读取功能中,没有定义纸张。你应该使用self.sheet.nrows

0

试试这个

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() 

我在8号线

+0

你已经错过了'在self'在一个多个地方'range' –

+0

谢谢指正! –

0

增加了self.提前sheet错误本身说,它无法找到你read()方法的属性sheet。您在两处使用了sheet: 1:在for循环的range 2:在第一行for循环中。

如果您想使用python中的任何方法内的任何属性,那么它可以只是一个类变量或局部变量或实例变量或一些导入的属性。

class variableinstance variable可以通过self访问。

在你的情况下,sheetinstance variable,因此它只能使用self访问。

所以,如果你改变sheetself.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() 
相关问题