我创建了一个Python类来解析文本输入文件,以便有一个CSV格式的文件。下面是我的类代码:
import os
from os import listdir
class MyClass:
def __init__(self, filename, colsList):
self.filename=filename
self.colsList=colsList
def textcsvconverter(self,filename,colsList):
import csv
print("colsList:",colsList)
self.cols=colsList
outputfilename=(os.path.basename(filename))
print("outputfilename:",outputfilename)
fname_out =(outputfilename + '.csv')
with open(filename) as fin, open(fname_out, 'wt') as fout:
writer = csv.writer(fout, delimiter=",", lineterminator="\n")
for line in fin:
line = line.rstrip() # removing the '\n' and other trailing whitespaces
data = [line[c[0]:c[1]] for c in cols]
writer.writerow(data)
return fname_out现在,我已经将这个类导入到我的Pyspark代码中,并尝试访问这个类方法,如下所示:
myobjectx = MyClass()
colsListA = [(0,1), (1,23), (23,31), (31,35),(35,41)]
outputfile1=myobjectx.textcsvconverter(finalpath1,colsListA)它给了我下面的错误信息:
TypeError: __init__() takes exactly 3 arguments (1 given)发布于 2018-10-16 05:58:29
使用带有3个参数的init方法声明类。但你有输入。如代码所示,您可以在init方法中获得默认值。
def __init__(self, filename=None, colsList=[]):
self.filename=filename
self.colsList=colsList因此,您可以声明您的实例,而不需要在其中添加任何参数。
myobjectx = MyClass()而且,您可以像现在使用textcsvconverter方法那样懒散地分配或放入参数。
更新
如下所示,我可以看到,您正在尝试使用特定的输入创建类的实例:
finalpath1 = 'your-filename.csv' # I assume you have it
colsListA = [(0,1), (1,23), (23,31), (31,35),(35,41)]
myobjectx = MyClass(finalpath1,colsListA)
outputfile1=myobjectx.textcsvconverter()你必须更新你的textcsvconverter来使用你的self.attribute。
发布于 2018-10-16 06:26:29
据我所知,你采用了init方法中的这两个论点。这就是原因,你会得到错误的。
TypeError: __init__() takes exactly 3 arguments (1 given)解决方案是,您应该更改init方法,如下所示。
def __init__(self, filename=None, colsList=[]):
self.filename=filename
self.colsList=colsList或
colsListA = [(0,1), (1,23), (23,31), (31,35),(35,41)]
myobjectx = MyClass(finalpath1, colsListA)
outputfile1=myobjectx.textcsvconverter(finalpath1,colsListA)在上面的第二种情况下,您需要修改整个代码。
import os
from os import listdir
class MyClass:
def __init__(self, filename, colsList):
self.filename=filename
self.colsList=colsList
def textcsvconverter(self):
import csv
print("colsList:",self.colsList)
self.cols=self.colsList
outputfilename=(os.path.basename(self.filename))
print("outputfilename:",outputfilename)
fname_out =(outputfilename + '.csv')
with open(self.filename) as fin, open(fname_out, 'wt') as fout:
writer = csv.writer(fout, delimiter=",", lineterminator="\n")
for line in fin:
line = line.rstrip() # removing the '\n' and other trailing whitespaces
data = [line[c[0]:c[1]] for c in cols]
writer.writerow(data)
return fname_out
colsListA = [(0,1), (1,23), (23,31), (31,35),(35,41)]
myobjectx = MyClass(finalpath1,colsListA)
outputfile1=myobjectx.textcsvconverter()发布于 2018-10-16 07:27:38
在做了一个小小的改动之后,它现在开始工作了:-) cols=self.colsList感谢您的帮助和支持
https://stackoverflow.com/questions/52828714
复制相似问题