Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > fr.comp.lang.python > #3632

Re: Python, angles et heures. Datetime ?

From Alain Ketterlin <alain@universite-de-strasbourg.fr.invalid>
Newsgroups fr.comp.lang.python
Subject Re: Python, angles et heures. Datetime ?
Date 2021-11-14 20:30 +0100
Organization Université de Strasbourg
Message-ID <87ee7iilg8.fsf@universite-de-strasbourg.fr.invalid> (permalink)
References <smr8cc$78l$1@gioia.aioe.org>

Show all headers | View raw


Dominique <zzz@aol.com.invalid> writes:

> En astronomie basée sur des éphémérides, l'essentiel des saisies se
> fait sous forme d'angles (ddd:mm:ss ou ddd:mm.mm) et d'heures
> (hh:mm:ss ou hh:mm.mm)
>
> Les heures et les angles sont décimalisés (ddd.ddddd et hh.hhhh) puis,
> éventuellement, transformés en notation normalisée (ddd:mm:ss etc).
>
> J'ai écrit un script qui contrôle la conformité de la saisie (rejeter
> hh/mm/ss par exemple, ou ddd:mmm:ss) Aucun problème aussi pour
> décimaliser ces saisies puis les retransformer en notations normales
> (hh:mm:ss etc).
>
> Existe-t-il toutefois une librairie qui fait ce travail de contrôle de
> la saisie et de sa transformation ?

Il y a deux choses dans ta question : 1) vérifier que le texte a la
bonne forme, et 2) le convertir en nombres. Et pour la première, une
question annexe : le nombre de chiffres est-il fixe ? (Autrement dit :
peut-on écrire "1:2.3" pour 1 degré 2 minutes 3 secondes, ou bien
doit-on écrire "001:02.03" ?

Dans tous les cas on peut utiliser des expressions régulières (ou
"rationnelles") pour faire le découpage :

import re

Ensuite, voici une version (pour les degrés) qui permet un nombre
quelconque de chiffres dans chaque partie, convertit, et teste
explicitement les valeurs :

ANGLE = re.compile ("([0-9]+):([0-9]+)[:.]([0-9]+)")
def verif_degres (s):
    m = ANGLE.fullmatch (s)
    if m is None:
        return None
    else:
        d,m,s = int (m[1]), int (m[2]), int (m[3])
        if d < 360 and m < 60 and s < 60:
            return d,m,s
        else:
            return None

Si tu veux exactement 3 chiffres (puis 2 puis 2), il faut le préciser à
la place du "+" :

ANGLE = re.compile ("([0-9]{3}):([0-9]{2})[:.]([0-9]{2})")

On peut aussi vérifier l'intervalle de valeur avec une expression
régulière un peu plus compliquée :

ANGLE_ALT = re.compile ("([0-2][0-9][0-9]|3[0-5][0-9])"
                        ":"
                        "([0-5][0-9])"
                        "[:.]"
                        "([0-5][0-9])")
def verif_degres_alt (s):
    m = ANGLE.fullmatch (s)
    if m is None:
        return None
    else:
        return (int (m[1]), int (m[2]), int (m[3]))

Mais franchement, je ne suis pas sûr que ça vaille le coup.

> Je regarde datetime
> (https://docs.python.org/fr/3/library/datetime.html) mais je n'ai pas
> l'impression d'y trouver ce que je cherche.

C'est plus adapté au calcul sur les dates et heures (un problème dont la
complexité surprend souvent), pas tellement à la vérification du format
textuel (via strptime), en tout cas pas pour des degrés.

-- Alain.

Back to fr.comp.lang.python | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

Python, angles et heures. Datetime ? Dominique <zzz@aol.com.invalid> - 2021-11-14 16:01 +0100
  Re: Python, angles et heures. Datetime ? Alain Ketterlin <alain@universite-de-strasbourg.fr.invalid> - 2021-11-14 20:30 +0100
    Re: Python, angles et heures. Datetime ? Dominique <zzz@aol.com.invalid> - 2021-11-15 07:19 +0100
      Re: Python, angles et heures. Datetime ? Alain Ketterlin <alain@universite-de-strasbourg.fr.invalid> - 2021-11-15 17:52 +0100
        Re: Python, angles et heures. Datetime ? Olivier Miakinen <om+news@miakinen.net> - 2021-11-15 17:59 +0100
          Re: Python, angles et heures. Datetime ? Dominique <zzz@aol.com.invalid> - 2021-11-15 19:23 +0100
          Re: Python, angles et heures. Datetime ? Alain Ketterlin <alain@universite-de-strasbourg.fr.invalid> - 2021-11-15 20:59 +0100
  Re: Python, angles et heures. Datetime ? Damien Wyart <damien.wyart@free.fr> - 2021-11-15 16:22 +0100
    Re: Python, angles et heures. Datetime ? Dominique <zzz@aol.com.invalid> - 2021-11-16 06:28 +0100

csiph-web