2011-08-27 17 views
8

Sono un po 'nuovo in Python e ho cercato di capirlo da solo, ma ho ottenuto solo frammenti fino ad ora. Fondamentalmente sto cercando uno script che ricercherà ricorsivamente una directory e le sue sottodirectory e cancelli i file che hanno almeno 24 ore di vita ma non alterano le directory. Qualsiasi consiglio o esempio è molto apprezzato.Python - cancella i vecchi file

Grazie

+2

Che cosa hai tentato finora e che cosa ha fatto di sbagliato? – Mark

+0

Vediamo i frammenti, forse possiamo aiutarli a incollarli insieme? – Johnsyweb

+1

Non è possibile eliminare file da una directory senza alterare la directory. –

risposta

5

Se avete bisogno di controllare tutti i file in tutte le directory ricorsivamente, qualcosa di simile dovrebbe fare:

import os, time 

path = "/path/to/folder" 
def flushdir(dir): 
    now = time.time() 
    for f in os.listdir(dir): 
     fullpath = os.path.join(dir, f) 
     if os.stat(fullpath).st_mtime < (now - 86400): 
      if os.path.isfile(fullpath): 
       os.remove(fullpath) 
      elif os.path.isdir(fullpath): 
       flushdir(fullpath) 

flushdir(path) 
28

Questo utilizza il metodo os.walk per cercare ricorsivamente una directory. Per ogni file, controlla la data modificata con os.path.getmtime e la confronta con datetime.now (l'ora corrente). datetime.timedelta è costruito per creare un timedelta di 24 ore.

Cerca nella directory os.path.curdir che è la directory corrente quando viene richiamato lo script. Puoi impostare dir_to_search su qualcos'altro, ad es. un parametro per lo script.

import os 
import datetime 

dir_to_search = os.path.curdir 
for dirpath, dirnames, filenames in os.walk(dir_to_search): 
    for file in filenames: 
     curpath = os.path.join(dirpath, file) 
     file_modified = datetime.datetime.fromtimestamp(os.path.getmtime(curpath)) 
     if datetime.datetime.now() - file_modified > datetime.timedelta(hours=24): 
      os.remove(curpath)