OVH Cloud OVH Cloud

Parser des chaînes de caractères

20 réponses
Avatar
Jerome
Bonjour,
je cherche à définir un petit formalisme de fichier de configuration
qui me permettra de stocker facilement des informations structurées
(tuples, listes, ...) dans des fichiers textes.

par exemple :
"values = 12 23 (12, 34, 44.5) 45 [23,45.3]" dans le fichier texte me
donne trois choses différentes :
- des valeurs spécifiques 12, 23, 45
- un tuple de 3 valeurs : (12, 34, 44.5)
- un intervalle : [23, 45.3]


Actuellement je connais plusieurs moyens de le faire mais je cherche des
moyens plus simples à mettre en oeuvre.

1/ Utiliser la fonction eval. Le problème est de devoir écrire la
structure en python, ce que je ne veux pas imposer.

2/ Utiliser un parsing à base de split. Difficile à maintenir et à étendre.

3/ Utiliser le module re. Plus simple que les split mais les regexp sont
vite complexes.

4/ Utiliser pyparsing. Je n'ai pas encore pu tester.


Est-ce que vous auriez d'autres pistes à me faire partager ou bien un
retour d'expérience ?


Merci,
Jérôme

10 réponses

1 2
Avatar
Jerome
Paul Morelle wrote:
Bonjour,
je cherche à définir un petit formalisme de fichier de configuration
qui me permettra de stocker facilement des informations structurées
(tuples, listes, ...) dans des fichiers textes.

par exemple :
"values = 12 23 (12, 34, 44.5) 45 [23,45.3]" dans le fichier texte me
donne trois choses différentes :
- des valeurs spécifiques 12, 23, 45
- un tuple de 3 valeurs : (12, 34, 44.5)
- un intervalle : [23, 45.3]


Actuellement je connais plusieurs moyens de le faire mais je cherche
des moyens plus simples à mettre en oeuvre.

1/ Utiliser la fonction eval. Le problème est de devoir écrire la
structure en python, ce que je ne veux pas imposer.

2/ Utiliser un parsing à base de split. Difficile à maintenir et à
étendre.

3/ Utiliser le module re. Plus simple que les split mais les regexp
sont vite complexes.

4/ Utiliser pyparsing. Je n'ai pas encore pu tester.


Est-ce que vous auriez d'autres pistes à me faire partager ou bien un
retour d'expérience ?


Merci,
Jérôme


Salut,

Tu peux aussi modifier un peu ton fichier de configuration :

values = (12, 23, (12, 34, 44.5), 45, [23, 45.3])

Ensuite, tu n'as qu'à faire évaluer le fichier par python, et tu
retrouves un tuple où tu peux retrouver les différents champs comme dans
un tableau.


oui, c'est le point 1

"1/ Utiliser la fonction eval"


Paul



Avatar
Amaury Forgeot d'Arc
La solution standard en Python pour les fichiers de configuration est
d'utiliser le module ConfigParser


Oui, je l'utilise déjà. Et c'est pour cela que je dois utiliser des
méthodes plus complexes car les valeurs ne peuvent être que des chaines
de caractères.


Mais dans un fichier texte, que peut-on mettre d'autre ?

Soit le type est indiqué par la valeur même (ex: une chaine de
caractères est entre guillemets, un entier ne contient que des chiffres,
une liste contient des virgules), soit c'est à l'interprétation des
données qu'on peut faire la conversion.

Dans le premier cas, on se rapproche d'un script python, dans le second
cas il est possible d'utiliser le module ConfigParser et ses méthodes
getint(), getfloat().

--
Amaury Forgeot d'Arc


Avatar
Paul Morelle

oui, c'est le point 1

"1/ Utiliser la fonction eval"



ah, oui, au temps pour moi :)

Avatar
NicolasP
Actuellement je connais plusieurs moyens de le faire mais je cherche
des moyens plus simples à mettre en oeuvre.

1/ Utiliser la fonction eval. Le problème est de devoir écrire la
structure en python, ce que je ne veux pas imposer.

2/ Utiliser un parsing à base de split. Difficile à maintenir et à
étendre.

3/ Utiliser le module re. Plus simple que les split mais les regexp
sont vite complexes.

4/ Utiliser pyparsing. Je n'ai pas encore pu tester.

5/ Utiliser XML



Nicolas


Avatar
Laurent Pointal

5/ Utiliser XML


Ah, ça a mis du temps, mais c'est arrivé :-)

Avatar
NicolasP

5/ Utiliser XML


Ah, ça a mis du temps, mais c'est arrivé :-)
Il fallait bien qu'il y en ait un qui s'y colle... :p



Avatar
Michel Claveau
Salut !

5/ Utiliser XML


Oui, bien sûr.

Mais alors, l'utilisateur ne pourra plus (toujours) utiliser un éditeur
de texte simple, pour modifier/étendre le fichier en question (il faut
au moins un éditeur capable de lire de l'UTF-8).

Et puis, côté syntaxe, on va éviter celle de Python, mais les
contraintes de XML sont conséquentes ; sans oublier la perte de
lisibilité.

Dans un genre proche, il me semble que certains ont proposé YAML...

--
@-salutations

Michel Claveau

Avatar
luc
Michel Claveau wrote:

Mais alors, l'utilisateur ne pourra plus (toujours) utiliser un éditeur
de texte simple, pour modifier/étendre le fichier en question (il faut
au moins un éditeur capable de lire de l'UTF-8).


Depuis quand un document XML ne peut il être encodé qu'en UTF-8 ?

--
Luc Heinrich

Avatar
Jerome
Amaury Forgeot d'Arc wrote:
La solution standard en Python pour les fichiers de configuration est
d'utiliser le module ConfigParser


Oui, je l'utilise déjà. Et c'est pour cela que je dois utiliser des
méthodes plus complexes car les valeurs ne peuvent être que des
chaines de caractères.


Mais dans un fichier texte, que peut-on mettre d'autre ?

Soit le type est indiqué par la valeur même (ex: une chaine de
caractères est entre guillemets, un entier ne contient que des chiffres,
une liste contient des virgules), soit c'est à l'interprétation des
données qu'on peut faire la conversion.

Dans le premier cas, on se rapproche d'un script python, dans le second
cas il est possible d'utiliser le module ConfigParser et ses méthodes
getint(), getfloat().


oui mais une chaine de caractère peut respecter une grammaire et donc
posséder une sémantique et une structure plus forte, par exemple un
script python :)



Avatar
Michel Claveau
Bonsoir !

Je me suis mal exprimé. Désolé.

Je voulais dire qu'un éditeur de texte simple, capable de lire
seulement de l'ASCII ou de l'ANSI, risque d'avoir des problèmes avec
des fichiers XML.

Et, quand je regarde les éditeurs de texte qui sont dans ma bécane,
plusieurs sont capables de traiter de l'UTF-8, mais pas de l'UTF-16, ou
de l'UTF-32, ou même de l'UTF-7.

Donc, l'UTF-8 me semble un bon compromis.


Mais, cela ne change rien sur le peu de lisibilité de XML (comparé à un
source Python ou à du YAML).

--
@-salutations

Michel Claveau
1 2