#1 Le 10/06/2019, à 07: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, à 17:50)
PC : B760M DS3H DDR4, 12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram Ubuntu 22.04 Ubuntu 24.04 , W10-PRO( 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, à 07: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, à 08:13)
Hors ligne
#3 Le 10/06/2019, à 11:14
- k3c
Re : [Résolu] extraction chaine en python
en Python sans regex
>>> a=['123','456','[789klm]']
>>> int(filter(str.isdigit, a[2]))
789
>>>
Debian 12 sur Thinkpad reconditionné
Hors ligne
#4 Le 10/06/2019, à 11: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 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram Ubuntu 22.04 Ubuntu 24.04 , W10-PRO( 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, à 12: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
>>>
Debian 12 sur Thinkpad reconditionné
Hors ligne
#6 Le 10/06/2019, à 14: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 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram Ubuntu 22.04 Ubuntu 24.04 , W10-PRO( 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, à 15: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 ?
Debian 12 sur Thinkpad reconditionné
Hors ligne
#8 Le 10/06/2019, à 15: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, à 15:57)
PC : B760M DS3H DDR4, 12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram Ubuntu 22.04 Ubuntu 24.04 , W10-PRO( 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, à 17: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, à 17:52)
PC : B760M DS3H DDR4, 12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram Ubuntu 22.04 Ubuntu 24.04 , W10-PRO( 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 10/06/2019, à 23: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