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 回答