3

私が使用するモジュールの多くは、ファイル全体をメモリにインポートするか、ファイルの処理中にファイルの内容を少しずつ取り込みます。この種の読み込みの進行状況を追跡する方法があるかどうか疑問に思っていますか? おそらくコールバックを受け取るラッパー クラスですか?

4

2 に答える 2

7

ファイルのサイズを決定し、その合計を読み取ったバイト数で割るだけです。このような:

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 

編集:それが最良のコードではないことはわかっていますが、概念を示したかっただけです。

于 2009-01-22T07:46:14.763 に答える
2

実際に「インポート」(「読み取り」ではない) を意味する場合は、インポート モジュールの定義をオーバーライドできます。タイミング機能を追加できます。

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

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

>>> class MyFile(file):
...     def read(self,*args,**kw):
...         # start timing
...         result= super(MyFile,self).read(*args,**kw)
...         # finish timing
...         return result
于 2009-01-22T11:41:32.383 に答える