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 avec strptime: "does not match format"


Sujet :

Python

  1. #1
    Membre expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Points : 3 377
    Points
    3 377
    Par défaut Problème avec strptime: "does not match format"
    Bonjour, j'utilise time.strptime sous Python 2.6.2 et j'ai l'erreur (curieuse) suivante :
    ValueError: time data '05:55, 8 July 2009' does not match format '%H:%M, %d %B %Y'
    Le code correspondant fonctionnait parfaitement jusqu'à ce qu'il soit changé de plate-forme (et je n'arrive pas à savoir précisément ce qui a changé entre les deux plate-formes). Je sais que j'ai déjà eu une erreur similaire avec ce code, mais je ne me souviens absolument plus comment j'ai résolu le problème...

    Le code en lui-même n'apprend rien, mais le voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sigTime = time.strptime("%s:%s, %s %s %s" % match[:5] ,"%H:%M, %d %B %Y")
    Je vous remercie par avance si vous avez des suggestions.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 119
    Points : 139
    Points
    139
    Par défaut
    Pas facile à trouver, puisque chez moi ça marche. Des pistes:
    %B, c'est le mois en locale - donc sur une plateforme française il devrait attendre Juillet.
    %H attend peut etre un nombre à deux chiffres? (08 au lieu de 8)

  3. #3
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Points : 1 658
    Points
    1 658
    Par défaut
    Il faudrait tester ce qu’il se passe avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sigTime = time.strptime(05:55, 8 Juillet 2009'  ,"%H:%M, %d %B %Y")

  4. #4
    Membre expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Points : 3 377
    Points
    3 377
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    time.strptime('05:55, 8 July 2009', "%H:%M, %d %B %Y")
    Ne donne pas d'erreur en console.
    Donc c'est pas un problème de locale, ni de format proprement dit.

    La chaîne d'où provient la date est à l'origine en UTF-8, j'ai longtemps cru que le probème venait de là, mais je l'ai passée en ASCII et ça foire toujours. Vraiment, je ne comprends pas.

  5. #5
    Membre habitué Avatar de ctiti60
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 75
    Points : 126
    Points
    126
    Par défaut
    Salut,

    Juste pour info, j'obtiens la même erreur si je mets le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    time.strptime("'05:55, 8 July 2009'", "%H:%M, %d %B %Y")
    Peut être un problème avec des guillemets ou des quotes en trop ?

  6. #6
    Membre expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Points : 3 377
    Points
    3 377
    Par défaut
    Citation Envoyé par ctiti60 Voir le message
    Peut être un problème avec des guillemets ou des quotes en trop ?
    Si je prends ton code, je récupère mes deux paires de guillemets dans l'erreur, donc je ne pense pas. D'autre part, je répète que mon code fonctionnait sur une autre plate-forme, donc j'ai peur que le problème vienne de l'environnement.

  7. #7
    Membre habitué Avatar de ctiti60
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 75
    Points : 126
    Points
    126
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    >>> time.strptime("'05:55, 8 July 2009'", "%H:%M, %d %B %Y")
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "...\python\Lib\_strptime.py", line 310, in strptime
        (data_string, format))
    ValueError: time data did not match format:  data='05:55, 8 July 2009'  fmt=%H:%M, %d %B %Y
    >>>
    Je n'ai pas les guillements dans l'erreur. C'était juste une piste du pourquoi on peut arriver à cette erreur.

  8. #8
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Points : 1 658
    Points
    1 658
    Par défaut
    %d Day of the month as a decimal number [01,31].
    Je parie que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    time.strptime("'05:55, 08 July 2009'", "%H:%M, %d %B %Y")
    va marcher

  9. #9
    Membre expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Points : 3 377
    Points
    3 377
    Par défaut
    Citation Envoyé par eyquem Voir le message
    Je parie que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    time.strptime("'05:55, 08 July 2009'", "%H:%M, %d %B %Y")
    va marcher
    Ca marche déjà sans le zéro, mais uniquement en console.

    D'autre part, je ne peux pas modifier la chaîne d'entrée, il faudrait que je modifie la chaîne de formatage, mais il n'y a apparemment pas de format pour [1, 31]...

  10. #10
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Points : 1 658
    Points
    1 658
    Par défaut
    Non je ne pense pas que ce soit ce que j'ai mis, finalement. J’ai testé sur ma machine:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    from time import strptime
    print strptime("05:55, 8 July 2009", "%H:%M, %d %B %Y")
    print strptime("05:55, 08 July 2009", "%H:%M, %d %B %Y")
    donne bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    (2009, 7, 8, 5, 55, 0, 2, 189, -1)
    (2009, 7, 8, 5, 55, 0, 2, 189, -1)
    J'aurais dû tester avant.



    Et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    from time import strftime,localtime
    print localtime()
    print strftime("%H:%M, %d %B %Y",localtime())
    donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    (2009, 7, 8, 16, 15, 47, 2, 189, 1)
    16:15, 08 July 2009
    parce que je suis avec une locale en anglais.



    Il faudrait que tu fasses tourner le code juste ci-dessus avec strftime, au moins on saurait ce qui sortirait comme date.


    PS

    Serait bien aussi de nous faire un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    print m
    print repr(m)
    pour voir un peu à quoi ressemble cette variable

  11. #11
    Membre expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Points : 3 377
    Points
    3 377
    Par défaut
    Citation Envoyé par eyquem Voir le message
    Il faudrait que tu fasses tourner le code juste ci-dessus avec strftime, au moins on saurait ce qui sortirait comme date.

    Avec un zéro en tête.
    14:29, 08 July 2009
    Citation Envoyé par eyquem Voir le message
    Serait bien aussi de nous faire un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    print m
    print repr(m)
    pour voir un peu à quoi ressemble cette variable
    Quelle variable ?

  12. #12
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 76
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Points : 1 913
    Points
    1 913
    Par défaut
    Je pense que c'est un pb de locale.
    Pour info je n'ai aucune erreur avec July
    Aucune erreur avec 8 ou 08
    Mais j'ai la même erreur avec Juillet
    Système: Python 2.6 sous IDE WingWare Ubuntu Jaunty 9-04
    Ce qu'on trouve est plus important que ce qu'on cherche.
    Maths de base pour les nuls (et les autres...)

  13. #13
    Membre expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Points : 3 377
    Points
    3 377
    Par défaut
    Citation Envoyé par Zavonen Voir le message
    Je pense que c'est un pb de locale.
    F...k, ma locale était en Français, j'étais sûr d'avoir vérifié... Comment ? Le système vient d'être installé et je n'ai rien touché ?? Et pourquoi ça marche en console et pas par le fichier ?

    Je me demande bien comment j'ai fini informaticien, moi.

    Bref, problème (à la con) résolu.

  14. #14
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Points : 1 658
    Points
    1 658
    Par défaut
    Pardon. Je voulais écrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    print match
    print repr(match)
    évidemment.

    On aurait vu tout de suite que ça doit sortir Juillet et non pas July, d’où problème de locale, comme on l’évoquait dès les deux premières réponses.

  15. #15
    Membre expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Points : 3 377
    Points
    3 377
    Par défaut
    Citation Envoyé par eyquem Voir le message
    On aurait vu tout de suite que ça doit sortir Juillet et non pas July, d’où problème de locale, comme on l’évoquait dès les deux premières réponses.
    Non, on ne voyait rien du tout avec ce test, parce que c'est le texte d'entrée, il est indépendant de la locale. Python en ligne de commande utilisait une locale en en_US et l'exécution du fichier en fr_FR, et je ne sais pas pourquoi.

  16. #16
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Points : 1 658
    Points
    1 658
    Par défaut
    Non, on ne voyait rien du tout avec ce test, parce que c'est le texte d'entrée, il est indépendant de la locale
    Ah oui, ainsi ça complique. Je n’y avais pas pensé.
    Mais ça veut dire que c’est la sortie de strftime() qui ne servirait à rien, elle ne permettrait pas de savoir comment est la variable match.



    Mais on ne sait toujours pas qu’elle est la forme des données dans match.
    print match et print repr(match) donnent elles Juillet ?
    Pour le moment , je n’ai toujours pas compris précisément.



    Python en ligne de commande utilisait une locale en en_US et l'exécution du fichier en fr_FR
    Est-ce à dire que Python traite les dates anglaises en ligne de commande et les dates françaises dans un fichier .py ?
    Je ne vois pas la liaison avec la locale



    Tu dis le problème Résolu, mais comment ? puisque le texte d’entrée match est indépendant de la locale et que tu ne peux pas modifier la chaîne d’entrée.

    PS:
    Je n’avais pas bien lu le message #11 dans lequel tu dis que strftime(0 sort 14:29, 08 July 2009
    Comment peut-il sortir July si ta locale est en français ? Je ne comprends pas.
    Faut dire que je ne comprends pas très bien cette histoire de locale.

    PPS
    Ah oui,
    Python traite les dates anglaises en ligne de commande
    ce doit être en ligne de commande que strftime() sort July

  17. #17
    Membre expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Points : 3 377
    Points
    3 377
    Par défaut
    Citation Envoyé par eyquem Voir le message
    Est-ce à dire que Python traite les dates anglaises en ligne de commande et les dates françaises dans un fichier .py ?
    Je ne vois pas la liaison avec la locale
    Eh bien, la variable d'environnement de la locale ($LANG) dit à Python s'il doit attendre un "July" ou un "Juillet". Ici, en ligne de commande il attendait "July", comme c'est le cas, parce qu'il ignore $LANG, pour une obscure raison. Dans le fichier, il se trouve qu'il prenait en compte ma locale en français et attendait "Juillet" alors que c'était "July" qui venait.

    Citation Envoyé par eyquem Voir le message
    Tu dis le problème Résolu, mais comment ? puisque le texte d’entrée match est indépendant de la locale et que tu ne peux pas modifier la chaîne d’entrée.
    En changeant $LANG à en_US.UTF-8 (valeur qu'il n'aurait jamais dû quitter), python attend de nouveau "July", conformément aux données d'entrée, et tout rentre dans l'ordre.

    Citation Envoyé par eyquem Voir le message
    ce doit être en ligne de commande que strftime() sort July
    Oui c'est ça. J'aurais dû faire un print depuis mon fichier de programme pour voir le problème.

  18. #18
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Points : 1 658
    Points
    1 658
    Par défaut
    Merci

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

Discussions similaires

  1. ORA-01861: literal does not match format string
    Par unix27 dans le forum PL/SQL
    Réponses: 5
    Dernier message: 07/01/2013, 19h02
  2. ORA-01861: literal does not match format string
    Par Bat91 dans le forum PL/SQL
    Réponses: 9
    Dernier message: 31/08/2010, 11h30
  3. ORA-01861: literal does not match format string
    Par labolabs dans le forum PL/SQL
    Réponses: 3
    Dernier message: 08/02/2010, 10h31
  4. [Oracle] ORA-01861: literal does not match format string
    Par habasque dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 02/07/2008, 21h57
  5. Réponses: 11
    Dernier message: 08/10/2004, 15h12

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