К сожалению, не похоже, что есть простой способ получить байты по номерам байтов.
Вы добавляете действительно большие файлы в этот файл tar? Если нет, я бы обновил ход работы по файловому принципу, так как по мере добавления файлов в tar, прогресс будет обновляться в зависимости от размера каждого файла.
Предположим, что все ваши имена файлов находятся в переменной toadd
и tarfile
- это объект TarFile
. Как насчет того,
from itertools import imap
from operator import attrgetter
# you may want to change this depending on how you want to update the
# file info for your tarobjs
tarobjs = imap(tarfile.getattrinfo, toadd)
total = sum(imap(attrgetter('size'), tarobjs))
complete = 0.0
for tarobj in tarobjs:
sys.stdout.write("\rPercent Complete: {0:2.0d}%".format(complete))
tarfile.add(tarobj)
complete += tarobj.size/total * 100
sys.stdout.write("\rPercent Complete: {0:2.0d}%\n".format(complete))
sys.stdout.write("Job Done!")
percent complete = байт до сих пор/общее количество байтов * 100%. время = размер/скорость. Это классная математика. –
Проблема в том, как я могу получить «байты до сих пор» из модуля tarfile. Когда я вызываю add и он начинает упаковывать файлы, как я могу узнать, сколько байтов файла было добавлено? – chakara