第一次在这里写课,我需要一点帮助。

我一直在尝试编写一个类,其中第一个类使用制表符分隔的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.filefile作为参数,但两者都无法正常工作。

谢谢!

最佳答案

问题

您没有为__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)。还请记住,该路径是相对于您执行脚本的位置。

10-06 00:55
查看更多