Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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

moi dans le post #1 a écrit :

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