我开始在python中旅行。我想创建一个程序,将我的xlsx文件转换为sql文件,然后将数据加载到数据库中。
我想创建具有两个参数的类:
这是初始版本(现在我只是打印行):
class XToSql():
def __init__(self, ex = xlrd.open_workbook('ex1.xlsx'), sh = ex.sheet_by_index(0)):
self.ex = ex
self.sh = sh
def modify(self):
for i in str((self.sh.nrows-1)):
a = 1
print(self.sh.row_values(a))
a += 1
a1 = XToSql()
a1.modify()
在__init__
函数中,此行标有红色:sh = ex.sheet_by_index(0) ->
,运行后出现此错误:
def __init__(self, ex = xlrd.open_workbook('ex1.xlsx'), sh = ex.sheet_by_index(0)):
NameError: name 'ex' is not defined
任何想法我做错了什么?
答案 0 :(得分:2)
在__init__
的参数列表中,ex
尚未进行评估,因此sh = ex.sheet_by_index(0))
会抛出NameError。这是在创建类对象时发生的。
你可以做几件事。编写一个类的一个原因是你可以重用它,所以也许类只应该把文件路径作为参数。
class XToSql():
def __init__(self, ex_file):
self.ex = xlrd.open_workbook(ex_file)
self.sh = self.ex.sheet_by_index(0)
def modify(self):
for i in str(self.sh.nrows - 1):
a = 1
print(self.sh.row_values(a))
a += 1
也许您应该能够指定要处理的工作表
class XToSql():
def __init__(self, ex_file, sheet=0):
self.ex = xlrd.open_workbook(ex_file)
self.sh = self.ex.sheet_by_index(sheet))
def modify(self):
for i in str(self.sh.nrows - 1):
a = 1
print(self.sh.row_values(a))
a += 1
并像这样使用
a = XToSql(ex_file='ex1.xlsx', sheet=0)
答案 1 :(得分:2)
ex
方法的正文中, __init__
不可用。您无法在方法体外部访问方法的参数。
您需要执行以下操作:
class XToSql:
def __init__(self, ex, sh=None):
self.ex = ex
if sh is None:
sh = ex.sheet_by_index(0)
self.sh = sh
然后像这样称呼它:
a1 = XToSql(xlrd.open_workbook('ex1.xlsx'))