J'ai un code Python ci-dessous qui doit vérifier les fichiers CSV de plus de 12 jours et les supprimer. Mais il ne supprime pas les fichiers. Quel est le problème avec le code?
import os, sys, time, glob, datetime
from subprocess import call
file_path = '/export/data/history'
now = time.time()
files = os.listdir(file_path)
os.chdir(file_path)
extension = 'csv'
result = [i for i in glob.glob('*.{}'.format(extension))]
# files = os.path.join(dirs, '')
print(result)
a = 0
def getCurrentTime():
currentTime=datetime.datetime.now()
return currentTime
def getTimeDifference(path):
last_modified_time =datetime.datetime.fromtimestamp(os.path.getmtime(path))
#print("modifid time = ")
print("Last modifid Date = "+str(last_modified_time))
timeDiff = getCurrentTime() - last_modified_time
return timeDiff
for xfile in result:
if os.path.isfile( file_path + xfile ):
d1 = getTimeDifference(file_path + xfile)
if(d1.days >= 12):
os.remove(xfile)
a= a+1
print (str(a)+' csv files deleted .')
3 Réponses :
On dirait que le problème est de la manière dont vos chemins de fichiers sont créés:
et P> Utilisez La ligne ci-dessous renvoie tous les fichiers du répertoire de travail actuel, pas le chemin spécifié avec la variable P> File_Path CODE> P> Modifier à: p> si OS.Path.File (File_Path + xfile) CODE> P> os.remove (xfile) code> p> os.path.join code> à la place: p> résultat = [i car i car i dans glob .glob ('*. {}'. Format (extension))] code> p> résultat = [i car je pour i in glob_glob ('{} *. {}'. Format (fichier_path, extension))] code> p> p>
Vous pouvez changer votre code à quelque chose comme ceci: Ce code dépend uniquement de the Pour décider si un fichier est assez vieux pour être supprimé, La fonction J'espère que cela pourrait aider. P> < / p> OS code> et DateTime code> modules. p> Os.walk code> trouve tous les fichiers du chemin d'entrée, tandis que la fonction code> Filtre code> saute tous les fichiers dont l'extension n'est pas dans les éléments sélectionnés ( '. CSV' code> dans cet exemple); Dans ce cas, OS .splitext code> est utilisé pour extraire l'extension de chaque fichier. P> TimeDelta code> Les objets sont utilisés. P> supprimer_old_files code> renvoie un dict code> contenant pour chaque extension d'un tuple avec les fichiers supprimés par correspondance. P>
Un moyen plus pythonique de le faire, en utilisant une fonction générique.
from os import path, listdir, remove
from datetime import datetime as dt
def remove_old_files(folder, extension, days_delta):
now = dt.now()
files_to_by_extension = [path.join(folder, f) for f in listdir(folder) if
f.endswith(extension)]
removed_files_counter = 0
for f in files_to_by_extension:
delta = now - dt.fromtimestamp(path.getmtime(f))
if delta.days > days_delta:
try:
remove(f)
removed_files_counter += 1
except OSError:
pass
return removed_files_counter
num_of_removed_files = remove_old_files('/tmp', 'txt', 3)