IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

datetime date 1 < date 2 delta? fonction?


Sujet :

Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2021
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mai 2021
    Messages : 5
    Points : 6
    Points
    6
    Par défaut datetime date 1 < date 2 delta? fonction?
    Bonjour

    Sur mon bureau j'ai plusieurs fichier .TAR exemple : "ABC-1-11-2021.TAR" ; "ABC-7-11-2021.TAR" ; "ABC-15-11-2021.TAR" et ainsi de suite... un scripts qui génère un fichier tout les X jour et bien sûr si l'on y prête pas attention ça pollue le bureau et c'est chiant à retrouvé le fichier le plus récent.

    Ce que j'aimerai c'est faire un script qui me conserve uniquement le fichier le plus récent et supprime les autre, dans l'exemple cité ci dessous ça serait : "ABC-15-11-2021.TAR" mais le plus complexe est de faire le script ce qui ne change pas c'est le nom du fichier "ABC" (dans notre exemple) ça sera toujours le même et toujours sur le bureau en revanche la date change

    Dans l'idée je pense qu'il faut déjà avoir la date du jour, et ensuite un delta entre ces fichiers et comme je l'ai dit avoir que le plus récent

    Merci

  2. #2
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    mars 2009
    Messages
    2 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : mars 2009
    Messages : 2 481
    Points : 5 506
    Points
    5 506
    Par défaut
    La date du jour ne sert à rien. Par contre si tu as une marge de manœuvre sur le nommage des fichiers, plutôt que de noter la date JJ-MM-AAAA, écris la dans l'autre sens AAAA-MM-JJ (en complétant avec un 0 devant les jours et mois de 1 à 9), de cette manière un simple tri des noms de fichier te permettra de savoir lequel est le plus récent (ce qui évite d'avoir à extraire la date du nom de fichier pour le savoir). Pas besoin de calculer un "delta" selon moi.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    juin 2008
    Messages
    18 885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 18 885
    Points : 32 604
    Points
    32 604
    Par défaut
    Citation Envoyé par thedumies Voir le message
    Ce que j'aimerai c'est faire un script qui me conserve uniquement le fichier le plus récent et supprime les autre
    Ça revient à écraser le fichier ancien avec le nouveau fichier... et les dates collées derrière ne servent à pas grand chose (si on n'en veut qu'un) sauf peut être à ranger l'ancien fichier dans un répertoire (pour garder les N derniers).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2021
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mai 2021
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Ça revient à écraser le fichier ancien avec le nouveau fichier... et les dates collées derrière ne servent à pas grand chose (si on n'en veut qu'un) sauf peut être à ranger l'ancien fichier dans un répertoire (pour garder les N derniers).

    - W
    Effectivement tu n'a pas totalement tord et après réflexion je me suis dit "si j'ai un pépin avec le fichier "récent" j'ai aucun fichier "backup" " du coup j'ai changé d'optique je vais conservé deux fichier, le plus recent, le précédent et le tout "dernier" poubelle ce qui donne dans mon optique

    - "ABC-15-11-2021.TAR" = fichier récent on conserve.

    - "ABC-7-11-2021.TAR" = mon "backup" de secours au cas ou supposons le fichier en vert est totalement inutilisable.

    - "ABC-1-11-2021.TAR" = on supprime totalement

    Ce qui amène à mon code ci-dessous

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    jours = time.time() - (9 * 86400)
    chemin = 'C:\\USER\Bureau\BCKP'
     
    for i in os.listdir(chemin):
        path = os.path.join(chemin, i)
     
        if os.stat(path).st_mtime <= jours:
            if os.path.isfile(path):
                try:
                    os.remove(path)
     
                except:
                    print("Peut pas supprimer le fichier :", i)
     
            else:
                try:
                    shutil.rmtree(path)
     
                except:
                    print("Je trouve pas le fichier :", i)
    J'ai pas ajouté les "import modules" et j'ai testé mais il supprime rien je loupe surement quelque chose je continue mes investigations

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    juin 2008
    Messages
    18 885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 18 885
    Points : 32 604
    Points
    32 604
    Par défaut
    Citation Envoyé par thedumies Voir le message
    j'ai testé mais il supprime rien je loupe surement quelque chose je continue mes investigations
    Déjà si votre code tourne une fois en faisant un peu de ménage, les fois suivantes il ne fera rien (parce que vous n'allez pas attendre des jours avant de re-tester).
    Ca serait mieux de jouer le truc à blanc du genre remplacer os.remove(path) par un print(f'os.remove({path})') pour tester la logique.

    Ensuite, s'il ne fait rien... c'est que des conditions ne sont pas remplies (ou mal écrites).
    Est ce que la liste retournée par os.listdir(chemin) contient des noms de fichiers?
    Que vaut la condition os.stat(path).st_mtime <= jours?

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    février 2006
    Messages
    9 797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : février 2006
    Messages : 9 797
    Points : 26 727
    Points
    26 727
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par thedumies Voir le message
    et c'est chiant à retrouvé le fichier le plus récent.
    ls -t ABC*.TAR...

    Citation Envoyé par thedumies Voir le message
    Ce que j'aimerai c'est faire un script qui me conserve uniquement le fichier le plus récent et supprime les autre,
    Et pourquoi un second script? Pourquoi ce n'est pas le script qui génère l'archive qui se charge, alors, de supprimer les vieux fichiers ???

    Citation Envoyé par thedumies Voir le message
    Dans l'idée je pense qu'il faut déjà avoir la date du jour, et ensuite un delta entre ces fichiers et comme je l'ai dit avoir que le plus récent
    Un delta entre deux fichiers ne donne pas le plus récent, juste l'écart de temps qu'il y a eu entre les deux fichiers. Pour avoir le plus récent (en Python) tu récupères son êtat via os.stat() et tu compares les mtime
    Exemple
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    import os
     
    fic=sorted(((x, os.stat(x).st_mtime) for x in os.listdir()), key=lambda x:x[1], reverse=True)
    print(fic)

    Citation Envoyé par thedumies Voir le message
    - "ABC-15-11-2021.TAR" = fichier récent on conserve.

    - "ABC-7-11-2021.TAR" = mon "backup" de secours au cas ou supposons le fichier en vert est totalement inutilisable.
    Mouais. Et si le jaune est lui-aussi totalement inutilisable? Je veux dire que si un accident peut se produire lors du premier archivage, alors il peut se produire lors du second. Pourquoi le script qui crée l'archive ne la vérifie-t-elle pas une fois celle-ci créée? Il suffit d'un simple tar tvf (en redirigeant éventuellement tout l'affichage sur /dev/null si on ne veut pas avoir de retour écran) et tester ensuite la variable d'état $?. Si elle vaut 0 c'est que l'archive est correcte...
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    juin 2008
    Messages
    18 885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 18 885
    Points : 32 604
    Points
    32 604
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Un delta entre deux fichiers ne donne pas le plus récent, juste l'écart de temps qu'il y a eu entre les deux fichiers. Pour avoir le plus récent (en Python) tu récupères son êtat via os.stat() et tu compares les mtime
    C'est ce qui est fait dans le code posté par le PO.

    Tout l'intérêt de poster du code est de pouvoir montrer ce qu'on peut raconter approximativement en français...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  8. #8
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    novembre 2010
    Messages
    2 999
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : novembre 2010
    Messages : 2 999
    Points : 8 316
    Points
    8 316
    Par défaut
    salut,

    en se basant sur la date contenue dans le nom du fichier on peut faire un truc du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    import os, glob, re
    from datetime import datetime
    chemin = r'C:\\USER\Bureau'
    nb = 1 # nombre de fichiers à conserver
    fichiers = glob.glob(os.path.join(chemin, 'ABC-*.TAR'))
    l = sorted(fichiers, key=lambda x: datetime.strptime(re.findall(r'-(\d{1,2}-\d{1,2}-\d{4}).tar$', x, re.IGNORECASE)[0], '%d-%m-%Y'), reverse=True)
    a_conserver, poubelle = l[:nb], l[nb:]
    print(f'{fichiers    = }')
    print(f'{l           = }')
    print(f'{a_conserver = }')
    print(f'{poubelle    = }')
    et le résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    fichiers    = ['C:\\\\USER\\Bureau\\ABC-7-11-2021.TAR', 'C:\\\\USER\\Bureau\\ABC-1-11-2021.TAR', 'C:\\\\USER\\Bureau\\ABC-21-11-2021.TAR', 'C:\\\\USER\\Bureau\\ABC-29-11-2021.TAR', 'C:\\\\USER\\Bureau\\ABC-15-11-2021.TAR']
    l           = ['C:\\\\USER\\Bureau\\ABC-29-11-2021.TAR', 'C:\\\\USER\\Bureau\\ABC-21-11-2021.TAR', 'C:\\\\USER\\Bureau\\ABC-15-11-2021.TAR', 'C:\\\\USER\\Bureau\\ABC-7-11-2021.TAR', 'C:\\\\USER\\Bureau\\ABC-1-11-2021.TAR']
    a_conserver = ['C:\\\\USER\\Bureau\\ABC-29-11-2021.TAR']
    poubelle    = ['C:\\\\USER\\Bureau\\ABC-21-11-2021.TAR', 'C:\\\\USER\\Bureau\\ABC-15-11-2021.TAR', 'C:\\\\USER\\Bureau\\ABC-7-11-2021.TAR', 'C:\\\\USER\\Bureau\\ABC-1-11-2021.TAR']
    on extrait la date avec une regex, on la transforme en objet datetime qui supporte les comparaisons avec strptime() et on applique un tri dessus.

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2021
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mai 2021
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Un grand merci à tous pour vos réponse je répond tardivement mais j'ai pu faire quelque chose qui correspond au projet

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    current_time = time.time()
    joursuppr = 2
    directory = 'C:\\USER\Bureau\BCKP'
     
    for dirpath,_,filenames in os.walk(directory):
        for f in filenames:
            fileWithPath = os.path.abspath(os.path.join(dirpath, f))
            creation_time = os.path.getmtime(fileWithPath)
     
            print(datetime.fromtimestamp(creation_time).strftime("%d-%m-%Y"))
            print("FICHIER DISPO:",fileWithPath)
            if (current_time - creation_time) // (24 * 3600) >= joursuppr:
                os.unlink(fileWithPath)
                print('{} SUPPRIME'.format(fileWithPath))
                print("\n")
            else:
                print('{} PAS SUPPRIME'.format(fileWithPath))

    Je conçoit il est pas hyper top top mais il fait le job je clos le sujet

    Merci bien

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Dates] Limite des fonctions natives DATE
    Par gloubi dans le forum Langage
    Réponses: 11
    Dernier message: 15/08/2007, 20h39
  2. [Dates] "concaténation" de fonction substr et autres
    Par javaboy dans le forum Langage
    Réponses: 12
    Dernier message: 12/04/2007, 11h51
  3. Réponses: 5
    Dernier message: 21/03/2006, 22h39
  4. [Dates] message en fonction d'une date
    Par chouchouboy dans le forum Langage
    Réponses: 14
    Dernier message: 24/02/2006, 18h31
  5. [Dates] pb avec fonction filemtime
    Par xave dans le forum Langage
    Réponses: 40
    Dernier message: 15/11/2005, 10h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo