PDA

View Full Version : [Python] Cancellare files più vecchi di X mesi


fbcyborg
11-05-2010, 08:15
Vorrei fare un programmino in Python che mi cancelli i files contenuti in una directory che però siano più vecchi di almeno X mesi.

Per cominciare ho buttato giù qualche riga di codice che vorrei che stampasse nome file e data di tutti i files di una directory:
import os,time

def modification_date(filename):
t = os.path.getmtime(filename)
return datetime.datetime.fromtimestamp(t)

path="." # per ora metto la dir corrente
dirList=os.listdir(path)
for fname in dirList:
print fname
d = modification_date(fname)
print d
Il problema è che non funziona. Mi da un problema di indentazione su d, che non riesco a capire. Quale potrebbe essere il problema ed una possibile soluzione al problema principale?

EDIT: per ora così riesco solo a farmi stampare data e ora di ogni file:
import os,time,datetime

def modification_date(filename):
t = os.path.getmtime(filename)
return datetime.datetime.fromtimestamp(t)

path="."
dirList=os.listdir(path)
for fname in dirList:
#print fname
d = modification_date(fname)
print d
Prima mancava l'import di datetime.
Ora se decommento print fname, mi da problemi.

^TiGeRShArK^
11-05-2010, 08:54
che versione di python usi?
Dalla 3 in poi non puoi più usare "print 'ciao'" ma è obbligatorio usare la sintassi "print('ciao')"

fbcyborg
11-05-2010, 09:03
Sulla macchina che dovrà eseguire quel codice c'è la versione 2.4. Sulla mia invece la 2.6, dove sto provando il codice.

Al momento sono giunto a scrivere il seguente codice:
import os,time,datetime,math

def modification_date(filename):
t = os.path.getmtime(filename)
return datetime.datetime.fromtimestamp(t).date()

path="."
dirList=os.listdir(path)
for fname in dirList:
d = modification_date(fname)
if datetime.datetime.now().date() - d > datetime.timedelta(180):
print fname
A questo punto dovrei sostituire la print con una delete di un file.

fbcyborg
11-05-2010, 09:29
Credo di aver risolto nel seguente modo:
import os,time,datetime,math

def modification_date(filename):
t = os.path.getmtime(filename)
return datetime.datetime.fromtimestamp(t).date()

path="/tmp/"
dirList=os.listdir(path)
for fname in dirList:
d = modification_date(fname)
if datetime.datetime.now().date() - d > datetime.timedelta(30):
os.remove(path+fname)
In tal modo, i files più vecchi di un mese verranno cancellati.