第一次在这里写课,我需要一些帮助。
我一直在尝试编写一个类,其中第一个采用制表符分隔的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
作为参数,但两者都不起作用。
谢谢!
答案 0 :(得分:3)
您没有为__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
)。还要记住,路径是相对于执行脚本的路径。
答案 1 :(得分:3)
您应该将该文件作为参数传递给__init__
。
c = consolidate ('abilities.txt')
然后在create_master_list
内,您应该打开self.file
。
with (open (self.file, 'rU') ) as f:
现在你可以打电话了
a = c.create_master_list ()
答案 2 :(得分:2)
那是因为__init__
的{{1}}方法需要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