Re: Python, angles et heures. Datetime ?

Liste des GroupesRevenir à fcl python 
Sujet : Re: Python, angles et heures. Datetime ?
De : zzz (at) *nospam* aol.com.invalid (Dominique)
Groupes : fr.comp.lang.python
Date : 15. Nov 2021, 08:19:41
Autres entêtes
Organisation : Aioe.org NNTP Server
Message-ID : <smsu5t$k3i$1@gioia.aioe.org>
References : 1 2
User-Agent : Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.3.0
Le 14/11/2021 à 20:30, Alain Ketterlin a écrit :
Dominique <zzz@aol.com.invalid> writes:

 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.
Bonjour Alain,
Je te remercie pour ce retour très précis et qui... me conforte dans l'analyse que j'avais faite de ce problème. Je m'étais tourné vers les REGEX et avais écrit deux motifs :
  modele1='[0-9]{1,3}[:][0-9]{1,2}[.][0-9]{1,}'
  modele2='[0-9]{1,3}[:][0-9]{1,2}[:][0-9]{2}'
où je réglais la question du nombre de caractères avec {1,3} et {1,2} pour les minutes et secondes (Merci les REGEX de LibreOffice !) ainsi que de la décimalisation des minutes (mm.mm) classique en navigation astronomique.
Je pensais renforcer mon script avec tes lignes :
if d < 360 and m < 60 and s < 60:
               return d,m,s
else:
               return None
mais il me faudrait distinguer les heures (maxi 24) des angles... Placer un modulo derrière demanderait de distinguer l'un de l'autre... Le modulo interviendra dans le travail au-delà.
Ce que j'ignore, c'est le comportement de re.compile... À quoi sert-il ?
Bonne journée,
--
Dominique
Courriel : dominique point sextant ate orange en France
Esto quod es

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