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 :

[LXML] Comparer date d'une balise avec une date tampon


Sujet :

Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Avril 2019
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Avril 2019
    Messages : 13
    Points : 6
    Points
    6
    Par défaut [LXML] Comparer date d'une balise avec une date tampon
    Bonjour à tous,

    Pour contextualiser, j'ai un script qui se lance chaque jour afin de parcourir une page xml (qui est mis à jour de manière aléatoire) et de récupérer du contenu.

    Voici un exemple du code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    from lxml import etree 
    import datetime
     
    date = datetime.datetime.today().strftime('%d/%m/%Y')
    tree = etree.parse(".../fichier.xml")
     
    for date in tree.xpath("/TRUCS/TRUC1[DATE_MAJ_TRUC='%s']/URL_TRUC" % date):
        print(date.text)
    Aujourd'hui ce script me permet de récupérer le contenu du jour (si il a été mis à jour).

    Cependant je souhaiterais l'optimiser en faisant en sorte de garder en mémoire la dernière date à laquelle il a récupéré du contenu, et de comparer cette date aux balises "DATE_MAJ_TRUC" de mon xml et de ne récupérer le contenu uniquement que si la date présente est supérieure à la date enregistrée au préalable.
    Et évidement, si je récupère du contenu, je souhaiterais écraser la précédente date par la nouvelle.

    Une idée ?

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Et bien tu enregistres cette date dans un fichier, non ?

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Avril 2019
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Avril 2019
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Salut VinsS,

    Ce qui m’intéresse surtout c'est de savoir comme faire en sorte de récupérer tout ce qui est après la date enregistrée.
    Par exemple, je ne lancerais plus mon script chaque jour, mais chaque semaine.
    Je voudrais pouvoir récupérer tout ce qui est supérieur à la date du précédent téléchargement.

    Avec mon bout de code je passe en revue le fichier chaque jour, ce qui n'est pas l'attendu.

  4. #4
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    [1]
    Cependant je souhaiterais l'optimiser en faisant en sorte de garder en mémoire la dernière date à laquelle il a récupéré du contenu, et de comparer cette date aux balises "DATE_MAJ_TRUC" de mon xml et de ne récupérer le contenu uniquement que si la date présente est supérieure à la date enregistrée au préalable.
    Le xml est par nature extensible (x). Si vous avez le droit de lecture et d'écriture sur le document xml en question, vous pouvez enregistrer l'info sur la dernière visite dans le xml lui-même.

    Par exemple, on peut insérer un attribut dit @dv (dv pour dernière visite) dans la racine TRUCS après chaque fois qu'on a récupéré les données en faisant comme ça :
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    root=tree.getroot()
    root.set('dv', date)
    Et puis le document ainsi modifié est sauvegardé en sortant.

    Et puis, chaque fois on charge le document, on lit d'abord le @dv et on récupère les données à la date supérieur à @dv.

    [2] Jusqu'une petite note non moins importante. Le format %d/%m/%Y avec duquel les infos des dates sont stockés aux DATE_MAJ_TRUC coûterait très cher, énormément cher. Il vaut mieux changer le format en préférant le format d'iso %Y-%m-%d à la source avant le xml est mis à jour. Quand on veut récupérer les données, il faut faire une opération de comparaison entre les dates - c'est incontournable - on va sentir la peine et ça coûte. Mais, c'est comme vous voulez !

Discussions similaires

  1. [SQL] Comparer résultat d'une requête Sql avec php
    Par nicoxweb dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 04/09/2007, 22h46
  2. [JDOM] Trouver une balise avec JDOM
    Par garzouille dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 15/05/2007, 12h13
  3. Selectionner une balise avec un attribut ayant deux valeur
    Par lemok dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 09/05/2007, 17h25
  4. [JDOM] Ajout d'une balise avec un attribut différent.
    Par Nidel dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 27/04/2007, 19h36
  5. [XSLT] - Comment selectionner une balise avec un nom variable ?
    Par bchabot dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 25/04/2006, 09h59

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