0

いくつかの異なる方法で多くのデータ ファイルをマージするための Python スクリプトを作成しました。これは私の最初の Python スクリプトであり、実際に OOP での最初の試みであり、機能的ではあるが最適ではない方法でオブジェクトとクラスについて考えてきたのではないかと思います。

ソース ファイルのクラスと、レコードであるソース ファイル内の行のサブクラスを作成しました。さて、Python のすべてがオブジェクトであるという新たな理解により、組み込み型が存在するだけでなく、既にそれを毎回使用している場合、ファイルのクラスを作成することで不必要な複雑さを生み出したのではないかと思います。ファイルを開きます。

残念ながら、ドキュメントから、新しい属性、メソッド、およびサブクラスをファイルの組み込み型に割り当てる方法が明確ではありません。また、ファイルのデータ型がクラスとどのように異なるのかわかりません。どちらも、特定のプロパティを持つオブジェクトを作成するための「ファクトリ」として単純に理解しています。

class SrcFile:
   self.name = which  
   self.terminals = set([])

def <a few methods>():
   with open(self.name) as file:
      <do some stuff and return something>

class Record(SrcFile):
      <methods>

for file in files:
   file = SrcFile(file)
   if <conditions on values from SrcFile methods>:
      with open(file) as file:
         for line in file:
            if <regexp match>:
               record = Record(line)
               <apply Record() methods>
               <write to tempfiles>

<merge tempfiles to stdout>
4

1 に答える 1

2

残念ながら、ドキュメントから、ファイルの組み込み型に新しい属性、メソッド、およびサブクラスを割り当てる方法が明確ではありません。

プロのヒント:あなたはしません。(組み込みのファイルタイプをいじくり回すことを検討できる状況があるかもしれませんが、それは現在の問題にはやり過ぎでしょう)

例の最後の部分を見ると、RecordクラスとSrcFileクラスを破棄して、次のように書き直すことができるようです。

def check_conditions(file):
    #return true if SrcFile conditions are met

def convert_record(line):
    #generate the string you want to print for the record

for file in files:
    if check_conditions(file):
        with open(file) as file:
            for line in file:
                if <regexp match>:
                    record = convert_record(line)
                    <write to tempfiles>

Wherecheck_conditionsは、SrcFileクラスに含まれていた条件をチェックしconvert_record、Record行の出力を生成します。

于 2012-06-20T13:37:31.150 に答える