Skip to main content
 首页 » 编程设计

python之将文件传递给类

2025年05月04日12mq0036

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

我一直在尝试编写一个类,其中第一个类采用制表符分隔的 csv 文件并输出字典列表。字典中的每个键都是 csv 中的列标题。

到目前为止,这是我的类(class)的样子:

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