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 :

Problème de format avec strptime


Sujet :

Python

  1. #1
    Membre averti
    Femme Profil pro
    Ingénieur informatique scientifique
    Inscrit en
    Mai 2010
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur informatique scientifique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 313
    Points : 301
    Points
    301
    Par défaut Problème de format avec strptime
    Bonjour,

    Dans mon application python, je souhaite vérifier que la date de création d'un répertoire est supérieure à une date t.
    Plus précisément je veux attendre que ce dossier soit créé avant de continuer mon programme.
    Pour cela, j'ai écrit le code suivant:

    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
    21
    22
    23
    24
    import os, time
     
    # Attente de la creation du dossier de resultats
    dateNow = time.localtime()   # Instant t. Je veux que mon repertoire soit cree apres cet instant
    etatRepResult = False
    attente = 0
     
    while not etatRepResult:
        # Verifie que le dossier de resultat existe
        if os.path.isdir(self.session.simu.rep_resultats):
            # Calcul de la date de creation du dossier
            dateStr = time.ctime(os.path.getctime(self.session.simu.rep_resultats))
            dateCreaDossier = time.strptime(dateStr)
     
            # Si le dossier de resultats a ete cree apres dateNow, la simulation a bien démarre
            if dateCreaDossier > dateNow:
                etatRepResult = True
     
        # Attente de 0.5s avant le prochain essai, jusqu'a la limite timeout
        time.sleep(0.5)
        attente += 0.5
        if attente > self.timeOut:
            startOk = False
            break;
    Cependant, j'ai ce message d'erreur lorsque j'exécute le programme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ValueError: time data 'Wed Jun 04 09:52:39 2014' does not match format '%a %b %d %H:%M:%S %Y'
    Je suis allée vérifier à quoi correspondent les lettres en "%":
    %a: "Weekday as locale’s abbreviated name."
    %b: "Month as locale’s abbreviated name."
    %d: "Day of the month as a zero-padded decimal number."
    %H: "Hour (24-hour clock) as a zero-padded decimal number."
    %M: "Minute as a zero-padded decimal number."
    %S: "Second as a zero-padded decimal number."
    %Y: "Year with century as a decimal number."
    Pour information je suis sous Linux (RedHat 5).

    Tout semble bien correspondre, pourquoi le programme me dit "does not match format"?
    Si quelqu'un peut m'aider à trouver ce qui ne va pas... et aussi, si vous avez des suggestions d'amélioration pour mon code, n'hésitez pas!

    Merci d'avance pour votre aide!

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Le programme est à revoir mais avec ma version de Python:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> time.strptime('Wed Jun 04 09:52:39 2014')
    time.struct_time(tm_year=2014, tm_mon=6, tm_mday=4, tm_hour=9, tm_min=52, tm_sec
    =39, tm_wday=2, tm_yday=155, tm_isdst=-1)
    >>>
    Et çà correspond bien au format '%a %b %d %H:%M:%S %Y'.

    Donc le problème est "ailleurs".

    C'est quoi l'OS, la version de Python,...

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

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par mokochan Voir le message
    Bonjour,

    Dans mon application python, je souhaite vérifier que la date de création d'un répertoire est supérieure à une date t.
    Plus précisément je veux attendre que ce dossier soit créé avant de continuer mon programme.
    Pour cela, j'ai écrit le code suivant:

    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
    21
    22
    23
    24
    import os, time
     
    # Attente de la creation du dossier de resultats
    dateNow = time.localtime()   # Instant t. Je veux que mon repertoire soit cree apres cet instant
    etatRepResult = False
    attente = 0
     
    while not etatRepResult:
        # Verifie que le dossier de resultat existe
        if os.path.isdir(self.session.simu.rep_resultats):
            # Calcul de la date de creation du dossier
            dateStr = time.ctime(os.path.getctime(self.session.simu.rep_resultats))
            dateCreaDossier = time.strptime(dateStr)
     
            # Si le dossier de resultats a ete cree apres dateNow, la simulation a bien démarre
            if dateCreaDossier > dateNow:
                etatRepResult = True
     
        # Attente de 0.5s avant le prochain essai, jusqu'a la limite timeout
        time.sleep(0.5)
        attente += 0.5
        if attente > self.timeOut:
            startOk = False
            break;
    Cependant, j'ai ce message d'erreur lorsque j'exécute le programme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ValueError: time data 'Wed Jun 04 09:52:39 2014' does not match format '%a %b %d %H:%M:%S %Y'
    Je suis allée vérifier à quoi correspondent les lettres en "%":
    %a: "Weekday as locale’s abbreviated name."
    %b: "Month as locale’s abbreviated name."
    %d: "Day of the month as a zero-padded decimal number."
    %H: "Hour (24-hour clock) as a zero-padded decimal number."
    %M: "Minute as a zero-padded decimal number."
    %S: "Second as a zero-padded decimal number."
    %Y: "Year with century as a decimal number."
    Pour information je suis sous Linux (RedHat 5).

    Tout semble bien correspondre, pourquoi le programme me dit "does not match format"?
    Si quelqu'un peut m'aider à trouver ce qui ne va pas... et aussi, si vous avez des suggestions d'amélioration pour mon code, n'hésitez pas!

    Merci d'avance pour votre aide!
    Bonjour,

    Essayez ceci :

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
     
    import os, time
     
    # Attente de la creation du dossier de resultats
    dateNow = time.time()   # Instant t. Je veux que mon repertoire soit cree apres cet instant
     
    attente = 0
     
    while True:
     
        # Verifie que le dossier de resultat existe
        if os.path.isdir(self.session.simu.rep_resultats):
     
            # Calcul de la date de creation du dossier
            dateCreaDossier = os.path.getctime(self.session.simu.rep_resultats)
     
            # Si le dossier de resultats a ete cree apres dateNow, la simulation a bien démarre
            if dateCreaDossier > dateNow:
     
                break
     
            # end if - dateCreaDossier
     
        # end if - isdir()
     
        # Attente de 0.5s avant le prochain essai, jusqu'a la limite timeout
        time.sleep(0.5)
     
        attente += 0.5
     
        if attente > self.timeOut:
     
            break
     
        # end if - attente
     
    # end while
    Il est plus simple (et plus sûr) de comparer des timestamps en virgule flottante qu'en passant par des formats de dates "human-readable".

    EDIT: une optimisation du code pourrait donner ceci :

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
     
    import os.path as OP
    import time
     
    def wait_dir (target_dir, timeout=5):
        # inits
        now = time.time()
        ticks = 0
        delay = 0.5
        # wait loop
        while ticks <= timeout:
            if OP.isdir(target_dir) and OP.getctime(target_dir) > now:
                # TRON console
                print("wait_dir(): succeeded!")
                # succeeded
                return True
            # end if
            # update ticks
            ticks += delay
            # wait for a while
            time.sleep(delay)
        # end while
        # TRON console
        print("wait_dir(): timed out.")
        # timed out
        return False
    # end def
    @+.
    Dernière modification par Invité ; 04/06/2014 à 13h09.

  4. #4
    Membre averti
    Femme Profil pro
    Ingénieur informatique scientifique
    Inscrit en
    Mai 2010
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur informatique scientifique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 313
    Points : 301
    Points
    301
    Par défaut
    Merci pour les réponses!

    Wiztricks en effet en testant sur une console python sur une autre machine cela fonctionne bien.
    Je suis sous redHat 5, version de python utilisée 2.7

    tarball69 j'ai testé ton code, je crois que je me suis compliquée la vie!
    Cela fonctionne très bien avec ta solution.

    Merci beaucoup!

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

Discussions similaires

  1. Problème de Format avec Datediff
    Par ataahualpa dans le forum VBA Access
    Réponses: 4
    Dernier message: 14/11/2014, 10h55
  2. [AC-2003] Problème de format avec VraiFaux (iif)
    Par Marie33 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 11/10/2011, 11h05
  3. Problème avec strptime: "does not match format"
    Par Eusebius dans le forum Général Python
    Réponses: 17
    Dernier message: 08/07/2009, 21h30
  4. [GD] Problème de format PNG avec imagepng
    Par -Naek- dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 25/04/2009, 22h59
  5. Problème de format avec ClustalW
    Par Jasmine80 dans le forum Bioinformatique
    Réponses: 2
    Dernier message: 27/08/2008, 13h30

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