0
votes

Supprimer les anciens fichiers dans UNIX à l'aide du code Python

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


0 commentaires

3 Réponses :


1
votes

On dirait que le problème est de la manière dont vos chemins de fichiers sont créés:

si OS.Path.File (File_Path + xfile)

et

os.remove (xfile)

Utilisez os.path.join à la place: xxx

La ligne ci-dessous renvoie tous les fichiers du répertoire de travail actuel, pas le chemin spécifié avec la variable File_Path

résultat = [i car i car i dans glob .glob ('*. {}'. Format (extension))]

Modifier à:

résultat = [i car je pour i in glob_glob ('{} *. {}'. Format (fichier_path, extension))]


0 commentaires

1
votes

Vous pouvez changer votre code à quelque chose comme ceci: xxx

Ce code dépend uniquement de OS et DateTime modules.

the Os.walk trouve tous les fichiers du chemin d'entrée, tandis que la fonction Filtre saute tous les fichiers dont l'extension n'est pas dans les éléments sélectionnés ( '. CSV' dans cet exemple); Dans ce cas, OS .splitext est utilisé pour extraire l'extension de chaque fichier.

Pour décider si un fichier est assez vieux pour être supprimé, TimeDelta Les objets sont utilisés.

La fonction supprimer_old_files renvoie un dict contenant pour chaque extension d'un tuple avec les fichiers supprimés par correspondance.

J'espère que cela pourrait aider. < / p>


0 commentaires

1
votes

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)


0 commentaires