0

私はまだOOPで自分の足を見つけており、デザインをどのように進めるかについて難問に直面しています。いくつかのファイルがあります。それらはすべてヘッダーを持ち、すべてデータを持っています。いくつか(25かそこら)のファイルタイプがあります。各ファイルタイプには、名前、ヘッダータイプ、データ形式、およびデータリーダー(つまり、特定のファイルタイプのデータを読み取るために作成するメソッド)があります。特定の「データリーダー」は、複数のファイルタイプからデータを読み取る場合があります。

最終的には、データセットが必要です。データセットには、上記のすべての属性に加えて、ソースファイルから読み込まれたすべてのデータと、ファイル名などの他のいくつかの情報が含まれます。

私が言ったように、私は25かそこらのファイルタイプを持ち、コードの実行は数百のデータセットを処理するかもしれません。ファイルタイプは非常に安定しています。時間が経つにつれてさらに追加される可能性がありますが、既存のファイルタイプの属性はほとんど変更されず、実行中には確実に変更されません。データセットでは、実際のデータは処理によって変化する可能性がありますが、関連するファイルタイプの属性は変化しません。

ファイルを処理する最初のステップは、そのヘッダーを読み取り、そのファイルが属するファイルの種類を把握することです。次に、適切なファイルタイプのデータリーダーを呼び出して、データセットを構築します。

今、私はファイルタイプ属性をデータセットに取り込むための最良の方法に固執しています。データセットが-「ファイルタイプ」であり、データセットがファイルタイプから継承する(または単にインスタンス化する)ようにする、またはデータセットが持つ-ファイルタイプおよびファイルタイプであると言う方がより実用的でしょうか?データセット属性になりますか?私はこれをPythonで行わなければなりません。この質問に答える際にPython固有の考慮事項はありますか?ご協力いただきありがとうございます。

4

2 に答える 2

1

私があなたを正しく理解しているなら、私はこのようなことをするでしょう:

class DataReader: #Your base for all readers
    @classmethod
    def read (_, file): pass #magic happens here

class DataReaders:
    def __init__ (self):
        self.__readers = # something like {FileType1: reader1, FileType2: reader1, FileType3: reader3}
    def __getitem__ (self, fileType): return self.__readers [fileType]


class DataSet:
    def __init__ (self, file, readers):
        self.__file = file
        self.readFileType ()
        self.data = readers [self.__fileType].read (file)

    def readFileType (self):
        self.__fileType = #parse the header of the file or whatever

readers = DataReaders ()
ds1 = DataSet (file1, readers)
ds2 = DataSet (file2, readers)
于 2013-01-24T23:02:23.757 に答える
1

私が正しく理解していれば、いくつかの種類のファイルまたは異なるファイル形式があります。これらのファイルにはデータセットがあり、これらのデータセットの形式は特定のタイプに固有ではありません。

この場合、ファイルタイプを推測し、データ形式も推測するクラスがあります。ファイルタイプとファイルフォーマットが推測されたら、適切なファイルタイプとデータフォーマットオブジェクトを作成できます。

class Detector(object):
    @classmethod
    def detect(cls, filename):
       """Return a file object"""
       pass

    @classmethod
    def infer_filetype(cls, header):
       pass

    @classmethod
    def infer_data_format(cls, contents):
       pass

class File(object):

    def __init__(self, reader)
        pass

    def data(self):
       pass
    ...
    # Other attributes.


class Reader(object)
    """An iterable to read the contents"""
于 2013-01-24T23:05:13.727 に答える