2016-06-08 2 views
0

je suis en train d'apprendre Phython donc je ne sais pas beaucoup de ce langage de codage encore;)Supprimer les dossiers spécifiés multiples (+ Contenu) en Python

Je suis en train de supprimer certains dossiers prédéfinis (y compris il est contenu) avec un script python, je sais comment supprimer un dossier comme celui-ci:

def purgeOld(): 
    import os,xbmc,shutil 
    xvbmc = os.listdir(xbmc.translatePath(os.path.join('special://home/addons/'))) 
    addonfolder = xbmc.translatePath(os.path.join('special://home/addons/')) 
    for item in xvbmc: 
     if ('plugin.video.Blaaat0') in item: 
      print str(xvbmc)+str(item) 
      try: 
       shutil.rmtree(addonfolder+item, ignore_errors=True) 
      except: 
       pass 
     else: 
      pass 
    return 

maintenant, je suis en train de le faire avec plusieurs dossiers ce que je ce que j'ai et travaille allmost, I ne supprimer le contenu de mes dossiers spécifiés, mais pas le dossier lui-même, comment puis-je changer cela OU devrais-je faire le complètement différent? je copier/coller quelques résultats de Google d'ici et l'a transformé en cette 'Frankencode';-P

class cacheEntry: 
    def __init__(self, namei, pathi): 
     self.name = namei 
     self.path = pathi 

def setupXvbmcEntries(): 
    entries = 3 #make sure this refelcts the amount of entries you have 
    dialogName = ["Blaaat1", "Blaaat2", "Blaaat3"] 
    pathName = ["special://home/addons/repository.Blaaat1","special://home/addons/repository.Blaaat2", 
       "special://home/addons/repository.Blaaat3"] 

    XvbmcEntries = [] 

    for x in range(entries): 
     XvbmcEntries.append(cacheEntry(dialogName[x],pathName[x])) 

    return XvbmcEntries 

def purgeOld(): 
    import os,xbmc,shutil 
# xvbmc = os.listdir(xbmc.translatePath(os.path.join('special://home/addons/'))) 
# addonfolder = xbmc.translatePath(os.path.join('special://home/addons/')) 
# for item in xvbmc: 
#  if ('plugin.video.Blaaat0') in item: 
#   print str(xvbmc)+str(item) 
#   try: 
#    shutil.rmtree(addonfolder+item, ignore_errors=True) 
#   except: 
#    pass 
#  else: 
#   pass 

    XvbmcEntries = setupXvbmcEntries() 

    for entry in XvbmcEntries: 
     xvbmcaddons = xbmc.translatePath(entry.path) 
     if os.path.exists(xvbmcaddons)==True:  
      for root, dirs, files in os.walk(xvbmcaddons): 
       file_count = 0 
       file_count += len(files) 
       if file_count > 0: 

         for f in files: 
          os.unlink(os.path.join(root, f)) 
         for d in dirs: 
          shutil.rmtree(os.path.join(root, d)) 

       else: 
        pass 

    return 

Espérons que je suis assez proche? OU devrais-je le faire d'une manière plus propre/meilleure peut-être? Avec mes meilleures salutations, Tim.

Répondre

0

1er essai/test, changé en:

def purgeOld(): 

    XvbmcEntries = setupXvbmcEntries() 

    for entry in XvbmcEntries: 
     xvbmcaddons = xbmc.translatePath(entry.path) 
     if os.path.exists(xvbmcaddons)==True:  
      for root, dirs, files in os.walk(xvbmcaddons): 
       file_count = 0 
       file_count += len(files) 
       if file_count > 0: 

        for f in files: 
         try: 
          os.unlink(os.path.join(root, f)) 
         except: 
          pass 
        for d in dirs: 
         try: 
          shutil.rmtree(os.path.join(root, d), ignore_errors=True) 
         except: 
          pass 

        try: 
         shutil.rmtree(xbmc.translatePath(os.path.join('special://home/addons/repository.Blaaat1')), ignore_errors=True) 
         shutil.rmtree(xbmc.translatePath(os.path.join('special://home/addons/repository.Blaaat2')), ignore_errors=True) 
         shutil.rmtree(xbmc.translatePath(os.path.join('special://home/addons/repository.Blaaat3')), ignore_errors=True) 
         dialog.ok("TEST-PURGE", 'we found some orphaned dependencies...','', 'NOTE: a REBOOT is highly recommended!') 
         xbmc.executebuiltin("UpdateLocalAddons") 
        except:    
         pass 

      else: 
       #dialog.ok("Purge test dialog2", "Crap cleaner all done...") 
       pass 
     else: 
      #dialog.ok("Purge test dialog3", "Crap cleaner all done...") 
      pass 

    dialog.ok("Purge dialog DONE!", "everything is as clean as a whistle...") 
# return 

Cela ne supprime tous les dossiers, mais maintenant je dois préciser « ce qu'il faut supprimer » deux fois, cela ne semble un peu redondant? (les entrées sont spécifiées dans setupXvbmcEntries plus tôt, maintenant encore/extra sous try: etc), je suppose que cela peut être fait plus joli, invoquer 'xvbmcaddons' à nouveau peut-être un peu peut-être?

0

2ème essai/test, et encore besoin d'une double élimination (1ère manche laisse en quelque sorte des répertoires vides) ...

def purgeOLD(): 

    XvbmcEntries = setupXvbmcEntries() 

    for entry in XvbmcEntries: 
     xvbmcaddons = xbmc.translatePath(entry.path) 
     if os.path.exists(xvbmcaddons)==True:  
      for root, dirs, files in os.walk(xvbmcaddons): 
       file_count = 0 
       file_count += len(files) 
       if file_count > 0: 

        for f in files: 
         try: 
          os.unlink(os.path.join(root, f)) 
         except OSError: 
          os.remove(os.path.join(root, f)) 
        for d in dirs: 
         try: 
          shutil.rmtree(os.path.join(root, d), ignore_errors=True) 
         except: 
          pass 

       else: 
        shutil.rmtree(xbmc.translatePath(os.path.join('special://home/addons/','plugin.video.Blaaat1')), ignore_errors=True) 
        shutil.rmtree(xbmc.translatePath(os.path.join('special://home/addons/','repository.Blaaaaat2')), ignore_errors=True) 
        shutil.rmtree(xbmc.translatePath(os.path.join('special://home/addons/','repository.Blaaaaat3')), ignore_errors=True) 
        dialog.ok("TEST-PURGE", 'we found some orphaned dependencies...','', 'NOTE: a REBOOT is highly recommended!') 
        xbmc.executebuiltin("UpdateLocalAddons") 
        pass 

     else: 
      # dialog.ok("Purge test dialog", "Crap cleaner all done...") 
      pass 

    dialog.ok("-= ALL DONE =- ", 'your system seems in good condition','', '(everything is as clean as a whistle)')