2

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

我一直在尝试编写一个类,其中第一个类采用制表符分隔的 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作为论据,但两者都不起作用。

谢谢!

4

3 回答 3

4

问题

您没有提供第二个参数__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)。还要记住,路径是相对于您执行脚本的位置。

于 2013-08-05T20:43:09.353 回答
3

您应该将文件作为参数传递给__init__.

c = consolidate ('abilities.txt')

然后里面create_master_list你应该打开self.file

with (open (self.file, 'rU') ) as f:

现在你可以打电话

a = c.create_master_list ()
于 2013-08-05T20:43:51.087 回答
2

那是因为你的__init__方法consolidate需要一个参数file

def __init__(self, file):

但你什么都不给:

c = consolidate()

要解决此问题,请像这样更改您的课程:

import csv

# I capitalized the name of this class because that is convention
class Consolidate(object):

    def __init__(self, file):
        self.file = file

    def create_master_list(self):
        # 'self' is the instance of 'Consolidate'
        # you want to open 'self.file' instead, which is the file
        with(open(self.file,'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()
于 2013-08-05T20:44:15.810 回答