質問

私が使用する多くのモジュールは、ファイル全体をメモリにインポートしたり、ファイルの処理中にファイルのコンテンツを細流化したりします。この種の読み込みの進行状況を追跡する方法はあるのでしょうか?おそらくコールバックを受け取るラッパークラスですか?

役に立ちましたか?

解決

これを行うには、ファイルのサイズを決定し、合計を読み取りバイト数で単純に除算します。このように:

import os

def show_progress(file_name, chunk_size=1024):
    fh = open(file_name, "r")
    total_size = os.path.getsize(file_name)
    total_read = 0
    while True:
        chunk = fh.read(chunk_size)
        if not chunk: 
            fh.close()
            break
        total_read += len(chunk)
        print "Progress: %s percent" % (total_read/total_size)
        yield chunk

for chunk in show_progress("my_file.txt"):
    # Process the chunk
    pass 

編集:最高のコードではないことはわかっていますが、コンセプトを示したいだけです。

他のヒント

実際に<!> quot; import <!> quot;を意味する場合(<!> quot; read <!> quot;ではありません)、インポートモジュール定義をオーバーライドできます。タイミング機能を追加できます。

imp モジュールを参照してください。

<!> quot; read <!> quot;の場合、Pythonファイルを独自のファイルのようなラッパーで簡単にラップできます。ファイルはあまりにも多くのメソッドを公開しません。興味深いデータをオーバーライドして、タイミングデータを取得できます。

>>> class MyFile(file):
...     def read(self,*args,**kw):
...         # start timing
...         result= super(MyFile,self).read(*args,**kw)
...         # finish timing
...         return result
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top