2016-06-08 27 views
0

ich versuche Phython zu lernen so nicht, dass ich noch eine Menge von dieser Codierung Sprache kennen;)Löschen mehrerer angegebenen Ordner (+ Contents) in Python

Ich versuche, einige vorher festgelegten Ordner zu löschen (einschließlich es ist Inhalt) mit einem python-Skript, ich weiß, wie ein Ordner wie folgt zu entfernen:

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 

Nun, das ich ich versuche, dies mit mehreren Ordnern zu tun, was ich habe und allmost funktioniert, ich tue entferne den Inhalt meiner angegebenen Ordner, aber nicht den Ordner selbst, wie kann ich das ändern ODER sollte ich das komplett anders machen? ich Kopie/ein paar Google-Ergebnisse von hier eingefügt und verwandeln sie in diesen;-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 

‚Frankencode‘ Hoffentlich ich ziemlich nah dran bin? ODER sollte ich es vielleicht auf eine sauberere/bessere Weise machen? Mit freundlichen Grüßen, Tim.

Antwort

0

1. Versuch/Test, verändert es in:

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 

Diese alle Ordner nicht entfernen, aber jetzt muss ich angeben zweimal ‚was zu entfernen‘, das ein wenig überflüssig scheint? (Einträge sind in setupXvbmcEntries früher angegeben, jetzt wieder/extra unter Versuch: etc), ich nehme an, das kann hübscher gemacht werden, 'xvbmcaddons' wieder irgendwie aufrufen, vielleicht?

0

zweiten try/Test, und bedarf noch der doppelten Entfernung (1. Lauf verlässt leere Verzeichnisse irgendwie) ...

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)')