2012-02-17 2 views
0

ファイルオブジェクトを読み込みするためのAPIを使用していますが、既存のファイルの一部だけを渡したいので、 APIは最初のnバイトだけを読み取ります。私はオーバーライドして、どのように正確にするために、他のどのような方法でわからないんだけど...以外ファイルの一部分を表すPythonファイルオブジェクトを作成する方法

class FilePortion(file): 
    def __init__(self, name, mode, lastByteToRead): 
     self.LAST_BYTE = lastByteToRead 
     super(FilePortion, self).__init__(name, mode) 
    def read(self, size=None): 
     position = self.tell() 
     if position < self.LAST_BYTE: 
      readSize = self.LAST_BYTE - position 
      if size and size < readSize: 
       readSize = size     
      return super(FilePortion, self).read(readSize) 
     else: 
      return '' 

:私は、私は自分のクラスで「ファイル」を包むことができようなものを想定しています。どうすればnext()を上書きできますか?これを行うより良い方法はありますか?

+0

あなたはこの http://stackoverflow.com/questions/519633/lazy-method-for-reading-big-file-in-python –

答えて

1

StringIOオブジェクトを指定するのはどうですか?最初のnバイトを読み込んで、オブジェクトのバッファに配置するだけです。

+0

を行うための発電機を書くことができ、私は見なさを作るいけませんこれは、しかし、私はかなり大きなファイルを扱っており、メモリを読み込む余分なパスを避けたいと考えています。 – Jegschemesch

+0

ラッパーオブジェクトはおそらくあなたの最善の策です。 APIが実際に使用している呼び出しをチェックするだけかもしれません。すべてを完全に実装する必要はありません。 – Amber

1

既存のtarfile._FileInFileラッパークラスを使用できます。自転車:)

+0

+1。これは文書化されていませんが、v2.5からPythonの一部となっています。あるいは、[標準ライブラリのソースコード](http://hg.python.org/cpython/file/2.5/Lib/tarfile.py)からコピーできます。 –

関連する問題