2012-01-14 2 views
2

Я работаю над скриптом python, который будет автоматически обновлять Caliber, так как он не содержит autoupdater и обновляется еженедельно. Мой скрипт загружает переносимый zip-файл, а затем должен извлечь определенную подпапку zip-файла (мне не нужны все файлы).Извлечение только определенной подпапки 7zip

То, что я до сих пор:

os.system("7z x install.zip -y -r -oc:\\\"Program Files (x86)\\\"Calibre2");

Это работает для всего, кроме загрузки конкретного подкаталога мне нужно. Какие-либо предложения?

ответ

0

Ниже приведена zip-версия аналогичного answer, которую я дал для tar-файлов.

Использование:

unzipdir.py path/to/zipfile zip/folder [output/folder] 

Сценарий:

import sys, os 
from zipfile import ZipFile 

def get_members(zip, prefix): 
    if not prefix.endswith('/'): 
     prefix += '/' 
    offset = len(prefix) 
    for zipinfo in zip.infolist(): 
     name = zipinfo.filename 
     if len(name) > offset: 
      zipinfo.filename = name[offset:] 
      yield zipinfo 

args = sys.argv[1:] 

if len(args): 
    zip = ZipFile(args[0]) 
    path = args[2] if len(args) > 2 else '.' 
    zip.extractall(path, get_members(zip, args[1])) 
+0

Дело в том, чтобы использовать 7zip .. – Jacobm001

+0

@ Jacobm00 1. Я протестировал свой сценарий в [последней версии калибра] (http://sourceforge.net/projects/calibre/files/), и он отлично работает (понадобилось всего несколько секунд, чтобы извлечь 128Mb '/ Caliber Portable/Calibre' папка). Так что 7zip не нужен. – ekhumoro

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