第一次在这里写课,我需要一点帮助。
我一直在尝试编写一个类,其中第一个类使用制表符分隔的csv文件并输出字典列表。字典中的每个键都是csv中的列标题。
到目前为止,这是我班级的样子:
import csv
class consolidate(object):
def __init__(self, file):
self.file = file
def create_master_list(self):
with(open(self,'rU')) as f:
f_d = csv.DictReader(f, delimiter = '\t')
m_l = []
for d in f_d:
m_l.append(d)
return m_l
当我尝试将其传递给文件时,如下所示:
c = consolidate()
a = c.create_master_list('Abilities.txt')
我收到以下错误:
TypeError: __init__() takes exactly 2 arguments (1 given)
我知道我想将文件参数传递给
create_master_list
函数,但是我不确定执行此操作的正确语法是什么。我已经尝试使用
self.file
和file
作为参数,但两者都无法正常工作。谢谢!
最佳答案
问题
您没有为__init__()
提供第二个参数:
class consolidate(object):
def __init__(self, file):
self.file = file
# rest of the code
当您像这样实例化它时:
c = consolidate()
解
这应该工作。将类定义更改为此:
import csv
class consolidate(object):
def __init__(self, filename):
self.filename = filename
def create_master_list(self):
with open(self.filename, 'rU') as f:
f_d = csv.DictReader(f, delimiter='\t')
m_l = []
for d in f_d:
m_l.append(d)
return m_l
然后像这样使用它:
c = consolidate('Abilities.txt')
a = c.create_master_list()
这是实现修复的一种方法。
注意:我还更改了命名(
self.file
建议它是文件对象,而实际上是文件名,因此是self.filename
)。还请记住,该路径是相对于您执行脚本的位置。