2010-12-03 6 views
7

Я знаю, как извлечь zip-архив с помощью Python, но как именно я показываю ход этого извлечения в процентах?Извлечь ZipFile с помощью Python, отобразить Прогресс Процент?

+0

Любая графическая среда, которую вы планируете использовать? – 2010-12-03 01:05:33

+0

Tkinter, если это то, о чем вы говорите. Все, что мне нужно - это отображать процент текста. – 2010-12-03 01:06:37

ответ

6

метод извлечения не обеспечивает обратного вызова для этого, поэтому для получения размера несжатого файла необходимо будет использовать getinfo, а затем открыть файл, считанный с него в блоках, и записать его в место, где вы хотите, чтобы файл идти и обновлять процент можно было бы также, чтобы восстановить время изменения, если это разыскивается пример:

import zipfile 
z = zipfile.ZipFile(some_source) 
entry_info = z.getinfo(entry_name) 
i = z.open(entry_name) 
o = open(target_name, 'w') 
offset = 0 
while True: 
    b = i.read(block_size) 
    offset += len(b) 
    set_percentage(float(offset)/float(entry_info.file_size) * 100.) 
    if b == '': 
     break 
    o.write(b) 
i.close() 
o.close() 
set_attributes_from(entry_info) 

это извлекающий entry_name к target_name


большинство это также сделано shutil.copyfileobj, но это не имеет обратного вызова для прогресса либо

источник метода ZipFile.extract называет _extract_member использует:

source = self.open(member, pwd=pwd) 
target = file(targetpath, "wb") 
shutil.copyfileobj(source, target) 
source.close() 
target.close() 

где участник будет преобразован из названия к объекту ZipInfo по getinfo(member) если он не был объектом ZipInfo

 Смежные вопросы

  • Нет связанных вопросов^_^