Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > fr.comp.lang.python > #3632
| 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> |
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 | Next — Previous in thread | Next in thread | Find similar
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