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.fileandfileを引数として試しましたが、どちらもうまくいきません。

ありがとう!

4

3 に答える 3

4

問題

の 2 番目の引数が指定されていません__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()

これは、修正を実現する 1 つの方法です。

:命名も変更しました(self.file実際にはファイル名ですが、ファイルオブジェクトであることが示唆されていますself.filename)。また、パスはスクリプトを実行した場所からの相対パスであることにも注意してください。

于 2013-08-05T20:43:09.353 に答える