2017-05-31 152 views
1

我有以下代碼:提取zip默認覆蓋?

pz = open(packagezip, 'rb') 

packz = zipfile.ZipFile(pz) 
for name in packz.namelist(): 
    packz.extract(name, package_ext_loc) 

pz.close() 

如果文件從(packagezip)遇到在目標位置(package_ext_loc)具有相同名稱的文件夾解壓,將這個功能automaticaly覆蓋的文件夾和文件,因爲這IS我想要的,如果不是,還有一個簡單的附加腳本來強制這種情況發生。

編輯已經通過一些網站我相信如果目標文件夾已經存在zipfile.extractall覆蓋。我怎麼能在這個例子中使用extractall。

回答

1

我測試了你的代碼,它工作正常。這意味着每次運行代碼時,它都會覆蓋文件夾中相同的現有文件。

1

我已經走了一輪關於確保的方式,如果有重複的文件夾,他們都是這樣去除,

packagezip = xbmc.translatePath('特殊://home/userdata/addon_data/plugin.program .super.favourites/Super Favorites/Maintenance/packages/packages.zip') userdatapackagezip = xbmc.translatePath('special://home/userdata/addon_data/plugin.program.super.favourites/Super Favorites/Maintenance/packages/addondata.zip') package_ext_loc = xbmc.translatePath('special:// home/addons /') addondata_ext_loc = xbmc.translatePath('special:// home/userdata/addon_data /') yespackage = os.path。存在(packagezip) yesaddondata = os.path.exists(userdatapackagezip)

if yespackage: 
    xbmc.executebuiltin("Notification(New Packages available, Extracting,()") 
    pz = open(packagezip, 'rb') 
    packz = zipfile.ZipFile(pz) 
    for name in packz.namelist(): 
     addonpath = xbmc.translatePath('special://home/addons/' + name) 
     addonpathexists = os.path.exists(addonpath) 
     if addonpathexists: 
      xbmc.executebuiltin("Notification(Previous version exists, removing,()") 
      shutil.rmtree(addonpath, ignore_errors=False) 
      xbmc.executebuiltin("Notification(Please wait, preparing extraction,()") 
      time.sleep(3) 
      packz.extract(name, package_ext_loc) 
      xbmc.executebuiltin("Notification(Extracted, REBOOT REQUIRED,()") 
     else: 
      xbmc.executebuiltin("Notification(No previous version, Extracting,()") 
      packz.extract(name, package_ext_loc) 
      xbmc.executebuiltin("Notification(Extracted, REBOOT REQUIRED,()") 
    pz.close() 
    xbmc.executebuiltin("Notification(Packages Extracted, checking addondata,()") 

    if yesaddondata: 
     xbmc.executebuiltin("Notification(Extracting addondata, Please wait!,()") 
     adz = open(userdatapackagezip, 'rb') 
     paddz = zipfile.ZipFile(adz) 
     for name in paddz.namelist(): 
      addondatapath = xbmc.translatePath('special://home/userdata/addon_data/' + name) 
      addondataexists = os.path.exists(addondatapath) 
      if addondataexists: 
       xbmc.executebuiltin("Notification(Previous data folder esists, now removing,()") 
       shutil.rmtree(addondatapath, ignore_errors=False) 
       xbmc.executebuiltin("Notification(Please wait, preparing extraction,()") 
       time.sleep(3) 
       paddz.extract(name, addondata_ext_loc) 
       xbmc.executebuiltin("Notification(Extracted, maybe needs Reeboot,()") 
      else: 
       xbmc.executebuiltin("Notification(No previous version, Extracting,()") 
       paddz.extract(name, addondata_ext_loc) 
     adz.close() 
    else: 
     xbmc.executebuiltin("Notification(No addondata, at this time,()") 

else: 
    xbmc.executebuiltin("Notification(No packages, at this time,()") 
    xbmc.executebuiltin("Notification(Checking addondata, for extraction,()") 
    if yesaddondata: 
     xbmc.executebuiltin("Notification(Extracting addondata, Please wait!,()") 
     adz = open(userdatapackagezip, 'rb') 
     paddz = zipfile.ZipFile(adz) 
     for name in paddz.namelist(): 
      addondatapath = xbmc.translatePath('special://home/userdata/addon_data/' + name) 
      addondataexists = os.path.exists(addondatapath) 
      if addondataexists: 
       xbmc.executebuiltin("Notification(Previous data folder esists, now removing,()") 
       shutil.rmtree(addondatapath, ignore_errors=False) 
       xbmc.executebuiltin("Notification(Please wait, preparing extraction,()") 
       time.sleep(3) 
       paddz.extract(name, addondata_ext_loc) 
       xbmc.executebuiltin("Notification(Extracted, maybe needs Reeboot,()") 
      else: 
       xbmc.executebuiltin("Notification(No previous version, Extracting,()") 
       paddz.extract(name, addondata_ext_loc) 
     adz.close() 
    else: 
     xbmc.executebuiltin("Notification(No addondata, at this time,()") 

我不是肯定的,如果壓縮文件會自動覆蓋 這KODE是一個科迪維護插件