Отслеживание прогресса загрузки файла в Python

StackOverflow https://stackoverflow.com/questions/468238

  •  19-08-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

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 

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

Другие советы

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

Смотрите на чертенок модуль.

Если вы имеете в виду "читать", то вы можете тривиально обернуть файлы 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