2017-05-31 147 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是一个科迪维护插件