Отслеживание прогресса загрузки файла в Python - PullRequest
3 голосов
/ 22 января 2009

Множество модулей, которые я использую, импортируют целые файлы в память или записывают содержимое файла во время их обработки. Мне интересно, есть ли способ отследить этот процесс загрузки? Возможно, класс-обертка, который принимает обратный вызов?

Ответы [ 2 ]

7 голосов
/ 22 января 2009

Я бы сделал это, определив размер файла, а затем просто разделив общее количество на количество прочитанных байтов. Как это:

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 

Редактировать: Я знаю, что это не лучший код, но я просто хотел показать концепцию.

2 голосов
/ 22 января 2009

Если вы на самом деле имеете в виду «импорт» (не «чтение»), то вы можете переопределить определения модуля импорта. Вы можете добавить возможности синхронизации.

См. Модуль imp .

Если вы имеете в виду «чтение», то вы можете легко обернуть файлы Python своей собственной файловой оболочкой. Файлы не предоставляют слишком много методов. Вы можете переопределить интересные, чтобы получить данные о времени.

>>> class MyFile(file):
...     def read(self,*args,**kw):
...         # start timing
...         result= super(MyFile,self).read(*args,**kw)
...         # finish timing
...         return result
...