Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

re.sub et chaine de caracteres...

6 réponses
Avatar
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

6 réponses

Avatar
moky
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
Avatar
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.
Avatar
fred
Alain BARTHE a écrit :

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
Avatar
Thomas
Salut,

On Jul 28, 3:28 pm, fred wrote:
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
Avatar
Alain Ketterlin
fred writes:

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.
Avatar
yves
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