re.sub et chaine de caracteres...

Le
fred
Bonjour,

Je voudrais transformer cette chaîne de caractères en une liste :

"ABAINVILLE","48,53","5,50",298,"ABAINVILLE.txt"

chaque item de la liste étant bien sûr délimité par la paire de guillemets.
(sauf pour 298, ce qui ne me facilite pas la tâche)

Tout le problème (pour moi) est la présence des virgules dans les nombres

Merci d'avance.


Cdlt.

--
Fred
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
moky
Le #19843491
fred ha scritto:
Bonjour,

Je voudrais transformer cette chaîne de caractères en une liste :

"ABAINVILLE","48,53","5,50",298,"ABAINVILLE.txt"

chaque item de la liste étant bien sûr délimité par la paire de guillemets.
(sauf pour 298, ce qui ne me facilite pas la tâche...)



Je réfléchit tout haut, mais je crois que ça peut t'aider.
Si s est une chaine, et que t en est une autre,

t.split(s)
est une liste qui coupe s à chaque occurence de t.

Par exemple

"bonjour".split("bonjour maman bonjour papa")
donne
[" maman"," papa"]

Je crois que dans ton cas, tu peux commencer par
""".split(chaine)

(pas sûr de la syntaxe pour """)

Ensuite, il te suffit d'enlever les éléments de ta liste qui ne sont que
",", et d'enlever les virgules des éléments qui ne sont pas uniquement
une virgule (pour traiter le cas du 298)

C'est sûrement pas la solution la plus élégante, mais ça peut dépanner
si tu ne trouves pas mieux.

Bonne aprème
Laurent
Alain BARTHE
Le #19843481
fred a écrit :
Bonjour,

Je voudrais transformer cette chaîne de caractères en une liste :

"ABAINVILLE","48,53","5,50",298,"ABAINVILLE.txt"

chaque item de la liste étant bien sûr délimité par la paire de guillemets.
(sauf pour 298, ce qui ne me facilite pas la tâche...)

Tout le problème (pour moi) est la présence des virgules dans les nombres...

Merci d'avance.


Cdlt.




Elle vient d'où cette chaine ?
Un export de données Excel ou qlq chose du style ?

Si oui, peut-être pourrais-tu changer le séparateur "," par autre chose.

Ca ne résout pas le problème posé, mais le problème lui-même.

Un simple split () te suffirait alors.
fred
Le #19843741
Alain BARTHE
fred a écrit :
Bonjour,
Je voudrais transformer cette chaîne de caractères en une liste :
"ABAINVILLE","48,53","5,50",298,"ABAINVILLE.txt"
chaque item de la liste étant bien sûr délimité par la paire de
guillemets.
(sauf pour 298, ce qui ne me facilite pas la tâche...)
Tout le problème (pour moi) est la présence des virgules dans les
nombres...
Merci d'avance.
Cdlt.




Elle vient d'où cette chaine ?
Un export de données Excel ou qlq chose du style ?

Si oui, peut-être pourrais-tu changer le séparateur "," par autre chose.

Ca ne résout pas le problème posé, mais le problème lui-même.

Un simple split () te suffirait alors.


Good shot! :-))

En attendant, je l'ai fait à ma sauce (merci quand même, Moky), et « ça marche ! ® »
mais bon, je retiens ton idée on ne peut plus triviale.

Merci.

--
Fred
Thomas
Le #19843731
Salut,

On Jul 28, 3:28 pm, fred
Je voudrais transformer cette chaîne de caractères en une liste :
"ABAINVILLE","48,53","5,50",298,"ABAINVILLE.txt"



Moi je jouerais avec les expressions régulières, genre :

import re
s = '"ABAINVILLE","48,53","5,50",298,"ABAINVILLE.txt"'
l = re.findall('"?([^"]*)"?,?',s)
print l

résultat :
['ABAINVILLE', '48,53', '5,50', '298,', 'ABAINVILLE.txt', '']

Avec un petit l.pop() avant le print, ça doit rouler. Et pour gérer
les ',' dans les nombres, on les remplace par des '.' et on demande le
résultat en float(), genre :
map( lambda s: float(s.replace(',','.')), l[1:4] )

Ok, c'est bidouille, mais en gros ça doit marcher.

--
Thomas
Alain Ketterlin
Le #19843801
fred
Je voudrais transformer cette chaîne de caractères en une liste :

"ABAINVILLE","48,53","5,50",298,"ABAINVILLE.txt"

chaque item de la liste étant bien sûr délimité par l a paire de guillemets.
(sauf pour 298, ce qui ne me facilite pas la tâche...)



A ben tiens, on en parlait à l'instant... Comme j'ai dit du mal
d'eval(), j'en profite pour en illustrer un usage. Si s contient ta
chaîne :

eval("["+s+"]")

et hop tu récupères une liste. Cela dit, si tu fais simplement

eval(s)

tu récupères un n-uplet.

Si tu as des doutes sur la provenance de ta chaîne, n'oublie pas de li re
attentivement la documentation d'eval(). Si tu essaies de lire des
fichiers CSV/etc. il y a probablement un module tout prêt qui fera tout
cela beaucoup mieux.

-- Alain.
yves
Le #19845911
Le Tue, 28 Jul 2009 17:28:48 +0200, fred a écrit:

Bonjour,

Je voudrais transformer cette chaîne de caractères en une liste :
"ABAINVILLE","48,53","5,50",298,"ABAINVILLE.txt"
chaque item de la liste étant bien sûr délimité par la paire de
guillemets. (sauf pour 298, ce qui ne me facilite pas la tâche...)
Tout le problème (pour moi) est la présence des virgules dans les
nombres...



Et en utilisant le module csv ?:

:~/essai$ ls
fichier script.py
:~/essai$ cat fichier
"ABAINVILLE","48,53","5,50",298,"ABAINVILLE.txt"
:~/essai$ cat script.py
import csv
reader = csv.reader(file("fichier"))
for elt in reader:
print elt
:~/essai$ python script.py
['ABAINVILLE', '48,53', '5,50', '298', 'ABAINVILLE.txt']

Cordialement,
--
Yves
Publicité
Poster une réponse
Anonyme