2012-03-17 21 views
2

私はPythonで作業しているデータソースを持っています。そのデータをファイルに保存して、しきい値がヒットしたら(たとえば、1K、1M)、ファイルが閉じられ、新しいファイルが自動的に開き、データを保存します。Pythonのデータソースから複数のファイルを作成する

すなわち:

<file handler with buffer 200> 
file.write('a'*1000) 

ラインは、上記のデータに基づいて、5つのファイルが生成されます。これを処理するプリビルドされたPythonライブラリがありますか、それとも自分で作成する必要がありますか?

答えて

1

ロガーフレームワークが多すぎる場合、あなたはそれを自分で行うことができます - コードの十行以上かそこらの必要はありません。ファイルのサイズを取得する最も簡単な方法は、オープンファイル記述子のtell()メソッドを呼び出すことです。

出力されるバイトを追跡することもできますが、プログラムが既存のファイルに追加されることがある場合は、追加のロジックが必要になります。

0

ピピのクイック検索では、あなたが望むことができるかもしれないが、それ以外の場合は自分で書くことをお勧めします。書くのはかなり簡単なツールです。

私はそれをテストしていませんが、これはすべき簡単な実装です(python3)。

class RotatingFile: 

    def __init__(self, basename, size, binary=False): 
     self.basename = basename 
     self.size = size 
     self.counter = 0 
     if binary: 
      self.buffer = b'' 
     else: 
      self.buffer = '' 

    def write(self, data) 
     self.buffer += data 
     if len(self.buffer) >= self.size: 
      data = self.buffer[:self.size] 
      self.buffer = self.buffer[self.size:] 
      name = self.basename + str(self.counter) 
      with open(name) as f: 
       f.write(data) 
      self.counter += 1 

    def flush(self): 
     name = self.basename + str(self.counter) 
     with open(name) as f: 
      f.write(self.buffer) 

だから、これは6つのファイルに書き込む必要があります。

>>> f = RotatingFile('myfile', 1000) 
>>> f.write('a' * 5500) 
>>> f.flush() 
+0

私はそれを見ましたが、私は潜在的にバイナリデータをソースとして扱っていて、それがうまくいくかどうかはわかりませんでした。 私はこれをツールとして組み込む前に、私がホイールを再発明していないことを確認したいだけです。 – Lestat

+0

それはおそらくあなた自身で書くのが最も簡単です。しかし、私が言ったように、それは非常に簡単でなければならない。 – aquavitae

+0

Python 2.xコードを書くときは、クラスを作成するときに "object"から継承してください。 – jsbueno

関連する問題