2011-08-27 11 views
8

Jestem trochę nowy dla Pythona i próbowałem to rozgryźć na własną rękę, ale do tej pory otrzymywałem tylko fragmenty. Zasadniczo szukam skryptu, który rekursywnie przeszuka katalog i jego podkatalogi oraz usunie pliki, które mają co najmniej 24 godziny, ale nie zmieniają katalogów. Wszelkie porady lub przykłady są bardzo mile widziane.Python - usuń stare pliki

Dzięki

+2

Co próbowałeś do tej pory i co robi źle? – Mark

+0

Zobaczmy bity i kawałki, może pomożemy skleić? – Johnsyweb

+1

Nie można usuwać plików z katalogu bez zmiany katalogu. –

Odpowiedz

5

Jeśli jest to potrzebne, aby sprawdzić wszystkie pliki w wszystkich katalogów rekurencyjnie, coś jak to należy zrobić:

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

ten wykorzystuje metodę os.walk rekursywnie szukać katalogu. Dla każdego pliku sprawdza zmodyfikowaną datę za pomocą os.path.getmtime i porównuje ją z datetime.now (aktualny czas). datetime.timedelta jest skonstruowany w celu utworzenia timedelta 24 godzin.

Przeszukuje katalog os.path.curdir, który jest katalogiem bieżącym po wywołaniu skryptu. Możesz ustawić dir_to_search na coś innego, np. parametr do skryptu.

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) 
Powiązane problemy