Menu

Couper une chaine [Résolu/Fermé]

-
Bonjour,

J'ai besoin d'aide pour faire un programme qui me permettrai de couper une chaine de caractères.
J'ai dans un dossier des fichiers avec leurs extensions, qui se présentent sous la forme " 20180912_... .(extension).(extension) ".
Et j'aimerai juste garder la première partie sans les extensions et écrire cette partie dans un autre fichier.

J'ai déjà écris ça :

Import bumpy as np
import os

O = os.listdir('emplacement du dossier')
O = [x.split('/')[-1]for x in O if 'extensions' in x.split('/')[-1]]

## Ici il faudrait que je coupe

fp = open ('le_nouveau_fichier.txt.', 'w')
fp.write("\n"+la_partie_récupérée)
fp.close()

Je vous remercie pour le temps que vous me consacrerez,

CestCa.
Afficher la suite 

1 réponse

Meilleure réponse
Messages postés
5169
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
18 juillet 2019
785
2
Merci
Salut CestCa,

En fait tu veux supprimer tout ce qui est à droite d'un point, y compris le point ?

Tu peux faire cela simplement avec une regexp, par exemple comme cela :

import os
import re

O = os.listdir('emplacement du dossier')
O2 = [re.sub(r'\..*$', '', st) for st in O]
print O2


Dal

Dire « Merci » 2

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 55008 internautes nous ont dit merci ce mois-ci

Salut !

Non juste avoir les premiers chiffres après le '_' , mais je suppose que je dois juste remplacer ici :
O2 = [re.sub(r'\ _*$', '', st) for st in O]

C'est bien cela ?

Merci beaucoup pour cette réponse :)

CestCa
[Dal]
Messages postés
5169
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
18 juillet 2019
785 -
Non juste avoir les premiers chiffres après le '_'

Je supose que tu veux dire avant

Dans ce cas, cela serait :
r'_.*$'


- c'est à dire
_

- suivit de n'importe quel caractère
.

- présent zéro, une ou plusieurs fois
*

- jusqu'à la fin de ligne
$


ce qui correspond à cette description est remplacé par la chaîne vide
''


Dal
> [Dal]
Messages postés
5169
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
18 juillet 2019
-
Super ! C'est parfait, ca marche très bien, merci beaucoup :)

Je mets tout ca comme résolu.
[Dal]
Messages postés
5169
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
18 juillet 2019
785 -
De rien :-)

Comme le motif à chercher est simple, tu peux aussi le faire sans regexp (et sans ajout de
import re
, donc).

Par exemple, le même résultat peut être obtenu en utilisant split comme cela :

O2 = [st.split('_', 1)[0] for st in O]

Par contre, cela ne fonctionne que si tu n'as dans ton répertoire que des fichiers qui correspondent à ta description. Sinon :
- si tu as dans ton répertoire des fichiers qui ne comportent pas un
_
, cela retournera le nom du fichier non modifié
- si tu as dans ton répertoire des fichiers qui comportent un
_
, mais qui ne sont pas précédés de 8 chiffres, tu auras ce qui précède le
_
, même si ce n'est pas ce que tu attends

Si tu as besoin de valider la chaîne afin d'être sûr que tu récupères ce que tu attends, tu peux le faire avec les regexp. Par exemple, comme cela :

import os
import re

O = os.listdir('emplacement du dossier')

O2 = []
for st in O:
    # on valide que la ligne commence par 8 chiffres (que l'on capture)
    # suivis par un _
    # suivi de n'importe quoi jusqu'au bout
    m = re.match(r'(^\d{8})_.*$', st);
    if m:
        # si c'est le cas, on le note
        O2.append(m.group(1))
print O2 

Les parenthèses dans la regexp créent un groupe de capture.

Voir : https://docs.python.org/2/library/re.html#match-objects

Dal
Ca marche, merci bien :)

Je suis assez novice sur python ^^

CestCa