Re: Python, angles et heures. Datetime ?

Liste des GroupesRevenir à fcl python 
Sujet : Re: Python, angles et heures. Datetime ?
De : alain (at) *nospam* universite-de-strasbourg.fr.invalid (Alain Ketterlin)
Groupes : fr.comp.lang.python
Date : 14. Nov 2021, 21:30:47
Autres entêtes
Organisation : Université de Strasbourg
Message-ID : <87ee7iilg8.fsf@universite-de-strasbourg.fr.invalid>
References : 1
User-Agent : Gnus/5.13 (Gnus v5.13) Emacs/25.2 (gnu/linux)
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.

Date Sujet#  Auteur
14 Nov 21 * Python, angles et heures. Datetime ?9Dominique
14 Nov 21 +* Re: Python, angles et heures. Datetime ?6Alain Ketterlin
15 Nov 21 i`* Re: Python, angles et heures. Datetime ?5Dominique
15 Nov 21 i `* Re: Python, angles et heures. Datetime ?4Alain Ketterlin
15 Nov 21 i  `* Re: Python, angles et heures. Datetime ?3Olivier Miakinen
15 Nov 21 i   +- Re: Python, angles et heures. Datetime ?1Dominique
15 Nov 21 i   `- Re: Python, angles et heures. Datetime ?1Alain Ketterlin
15 Nov 21 `* Re: Python, angles et heures. Datetime ?2Damien Wyart
16 Nov 21  `- Re: Python, angles et heures. Datetime ?1Dominique

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal