さまざまな理由から、いくつかのサブファイルを使用して読み書きするクラスがあります。 __init__
のオブジェクト属性を初期化する適切な方法は何ですか?ファイルは文字列としてのファイルへのパスなので、私はself.file = 'file'
として初期化することを選択しました。これは何らかの理由で私にとって非常に汚いと感じています。これは何らかの慣習に反すると確信しています。私はself.metafile = None
が普及しているかもしれないと推測していますが、それについては本当にわかりません。ファイルを参照するインスタンス属性を初期化する適切な方法は何ですか?
単純な例(2つのオブジェクト属性ファイルのみで、場合によっては5〜6個のファイルで作業しています)。 (私は、この場合、オブジェクト属性として使用することは絶対に必要ではないことを認識していますが、私が実際に行っている作業で本当に役立つことがわかりました。最初の場所でファイルを初期化する方法について説明します。)
class FileHandler(object):
def __init__(self, source, meta):
self.source_folder = source
self.meta_folder = meta
self.metafile = 'file'
self.output = 'file'
def read_meta(self):
meta = glob.glob(self.meta_folder+ '*.csv')
for m in meta:
self.metafile = m
self.read_data()
def read_data(self):
source = glob.glob(self.source_folder + '*.csv')
for src in source:
current_file = src.strip('.csv')
if current_file == self.metafile.strip('_meta.csv')
self.output = current_file + '_output.csv'
self.combine_meta()
def combine_meta(self):
# reads the source data, combines it with metadata and writes out
# a neat csv file (to self.output) that can be imported into a database
Btw、なぜ最後の 'metafile'と' output'を両方のループに格納しますか?いくつかのメタファイルやいくつかの出力がある状況はありますか? – quasoft
はい、いくつかのケースではそれぞれ数十があります。 –
関数のローカル変数として 'metafile'と' output'を残すことができるかもしれません。次に、 'read_data'に' metafile'を引数として渡し、 'metafile'と' output'を 'combine_meta'に渡します。そうすれば、それらを初期化する必要はありません。もちろん、他の方法でも使用しない限り、これはすべて動作します。 – quasoft