#1 Le 10/06/2019, à 08:28
- ar barzh paour
[Résolu] extraction chaine en python
bonjour à tous en ce beau lundi de pentecôte
j'aimerai en python récupérer des chiffres ce qui se trouvent entre [ ] en fin d'une chaîne
remarque la chaine en fait est l'élément row[2] d'une liste python
row=['...','....','.... [nnnn]']
en bash j'ai réussi en simulant ceci en utilisant sed
chaine="['...', '...', '.... [10413]']"
valeur=`sed "s/.*\(\[[0-9]\{1,\}]\)']$/\1/" <<<"$chaine"`
echo $valeur
[10413]
ce qui me satisfait
mais en python , je cale (très débutant)
je suppose déjà
import re
puis ??
quoique
Dernière modification par ar barzh paour (Le 10/06/2019, à 18:50)
PC : B760M DS3H DDR4, 12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 22.04, 22.04, 23.04
Portable1 : Intel(R) Core(TM)2 Duo CPU T6570 @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 23.04 ( en voyage )
Portable2 : T5750 @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )
Hors ligne
#2 Le 10/06/2019, à 08:47
- pingouinux
Re : [Résolu] extraction chaine en python
Bonjour,
import re
s=chaine="['...', '...', '.... [10413]']"
k=re.match(".*(\[\d+])']$",s)
if k: print(k.group(1))
Ajouté :
Tu as aussi
valeur=$(grep -Po "\[\d+](?=']$)" <<<"$chaine")
echo "$valeur"
Dernière modification par pingouinux (Le 10/06/2019, à 09:13)
Hors ligne
#3 Le 10/06/2019, à 12:14
- k3c
Re : [Résolu] extraction chaine en python
en Python sans regex
>>> a=['123','456','[789klm]']
>>> int(filter(str.isdigit, a[2]))
789
>>>
Archlinux sur Xiaomi Air 13
Hors ligne
#4 Le 10/06/2019, à 12:40
- ar barzh paour
Re : [Résolu] extraction chaine en python
@k3c
>>> a=['123','456','[789klm]']
>>> int(filter(str.isdigit, a[2]))
TypeError: int() argument must be a string, a bytes-like object or a number, not 'filter'
PC : B760M DS3H DDR4, 12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 22.04, 22.04, 23.04
Portable1 : Intel(R) Core(TM)2 Duo CPU T6570 @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 23.04 ( en voyage )
Portable2 : T5750 @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )
Hors ligne
#5 Le 10/06/2019, à 13:01
- k3c
Re : [Résolu] extraction chaine en python
je suis en Python 2.7
en Python 3
>>> a=['123','456','[789klm]']
>>> int(''.join(filter(str.isdigit, a[2])))
789
>>>
Archlinux sur Xiaomi Air 13
Hors ligne
#6 Le 10/06/2019, à 15:52
- ar barzh paour
Re : [Résolu] extraction chaine en python
@k3c
c'est mieux mais pas tout à fait mais je n'ai pas le temps d'analyser
exemple
with open('./fichier.csv',newline='',encoding="Latin1") as f:
c_reader=csv.reader(f,delimiter=",")
for row in c_reader:
print(row[2])
k=int(''.join(filter(str.isdigit, row[2])))
print(k)
le résultat
c / LA / D / Ar / Rue des Comtes [D4] [10413]
410413
c / CH / ieu / Mix / D120 [2550]
1202550
PC : B760M DS3H DDR4, 12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 22.04, 22.04, 23.04
Portable1 : Intel(R) Core(TM)2 Duo CPU T6570 @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 23.04 ( en voyage )
Portable2 : T5750 @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )
Hors ligne
#7 Le 10/06/2019, à 16:25
- k3c
Re : [Résolu] extraction chaine en python
tu veux afficher 10413 ou 2550 donc, c'est cela ?
la commande affiche tous les nombres dans le dernier élément, mais toi tu veux seulement ceux entre []
tu peux afficher quelques lignes pour que je sois sûr de comprendre ?
Archlinux sur Xiaomi Air 13
Hors ligne
#8 Le 10/06/2019, à 16:37
- ar barzh paour
Re : [Résolu] extraction chaine en python
@ k3c
oui dans le post #6 j'ai donné l'exemple de deux chaines ,
la 1ère se termine par [D4] [10413] seul 10413 m'intéresse
la 2ème se termine par c / CH / ieu / Mix / D120 [2550] et seul 2550 m'intéresse
j'aimerai en python récupérer des chiffres ce qui se trouvent entre [ ] en fin d'une chaîne
@pingouinux
je pense que c'est bon ,( je me suis emmêlé dans la fin de chaîne , qui à priori ne se termine pas par ]'] mais par ] tout simplement )
le fichier réel que je lis est formaté ainsi :
valeur1,valeur2,"texte entre guillemet qui se termine par [nombre]"
j'ai donc adapté le re.match
with open('./fichier.csv',newline='',encoding="Latin1") as f:
c_reader=csv.reader(f,delimiter=",")
for row in c_reader:
print(row[2])
k=re.match(".*(\[\d+])$",row[2])
if k: print(k.group(1))
c / LA / D / Ar / Rue des Comtes [D4] [10413]
[10413]
c / CH / ieu / Mix / D120 [2550]
[2550]
Dernière modification par ar barzh paour (Le 10/06/2019, à 16:57)
PC : B760M DS3H DDR4, 12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 22.04, 22.04, 23.04
Portable1 : Intel(R) Core(TM)2 Duo CPU T6570 @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 23.04 ( en voyage )
Portable2 : T5750 @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )
Hors ligne
#9 Le 10/06/2019, à 18:49
- ar barzh paour
Re : [Résolu] extraction chaine en python
après consultation de la doc match , je trouve l'explication
re.match(".*(\[\d+])$"
# .* ( \[ \d+ ] ) $
# .* : n'importe quoi
# ( : début du groupe1 de ( )
# \[ : trouver un crochet ouvrant
# \d : n'importe quel chiffre décimal Unicode
# équivalent à [0-9]
# + : 1 répétition ou plus du précédent
# ] : trouver un crochet fermant
# ) : fin du groupe1
# $ : se trouvant en fin de chaine
# k.group(1) : correspondance avec le groupe de ( ) 1
la syntaxe des RE un peu comme dans batch .....
merci pingouinux
Dernière modification par ar barzh paour (Le 10/06/2019, à 18:52)
PC : B760M DS3H DDR4, 12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 22.04, 22.04, 23.04
Portable1 : Intel(R) Core(TM)2 Duo CPU T6570 @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 23.04 ( en voyage )
Portable2 : T5750 @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )
Hors ligne
#10 Le 11/06/2019, à 00:58
- kholo
Re : [Résolu] extraction chaine en python
salut,
je vais peut être dire une connerie mais pourquoi ne pas parser à grand coup de slice
chaine="['...', '...', '.... [10413]']"
print(chaine[1:-1])
et pour retrouver une liste utilisable :
print(chaine[1:-1].split(','))
voire
print([x.strip(' ')[1:-1] for x in chaine[1:-1].split(',')])
Hors ligne