С помощью другого ответа наконец-то нашел решение.Идея состоит в том, чтобы использовать размер обработанного сжатого файла, общий размер сжатого файла и время, используемое для оценки оставшегося времени.Для этого
- считывает сжатый файл как объект байта в память:
byte_data
, что довольно быстро - вычисляет размер
byte_data
, используя total_size = len(byte_data)
- обтекание
byte_data
как byte_f = io.BytesIO(byte_data)
- обтекание
byte_f
как bz2f = bz2.BZ2File(byte_f)
- во время обработки, используйте
pos = byte_f.tell()
для получения текущей позиции в сжатый file - вычислить точный процент обработанного
percent = pos/total_size
- используемого времени записи и рассчитать оставшееся время
Через несколько секунд оценка может стать довольно точной:
0.01% processed, 2.00s elapsed, 17514.27s remaining...
0.02% processed, 4.00s elapsed, 20167.48s remaining...
0.03% processed, 6.00s elapsed, 21239.60s remaining...
0.04% processed, 8.00s elapsed, 21818.91s remaining...
0.05% processed, 10.00s elapsed, 22180.76s remaining...
0.05% processed, 12.00s elapsed, 22427.78s remaining...
0.06% processed, 14.00s elapsed, 22661.80s remaining...
0.07% processed, 16.00s elapsed, 22840.45s remaining...
0.08% processed, 18.00s elapsed, 22937.07s remaining...
....
99.97% processed, 22704.28s elapsed, 6.27s remaining...
99.98% processed, 22706.28s elapsed, 4.40s remaining...
99.99% processed, 22708.28s elapsed, 2.45s remaining...
100.00% processed, 22710.28s elapsed, 0.54s remaining...