





Я бы сделал это, определив размер файла, а затем просто разделив общую сумму на количество прочитанных байтов. Как это:
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