Couper une chaine

Résolu/Fermé
CestCa - Modifié le 20 juin 2018 à 11:07
 CestCa - 20 juin 2018 à 15:15
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.
A voir également:

1 réponse

[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié le 20 juin 2018 à 13:40
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
2
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
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié le 20 juin 2018 à 13:57
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
0
CestCa > [Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024
20 juin 2018 à 14:02
Super ! C'est parfait, ca marche très bien, merci beaucoup :)

Je mets tout ca comme résolu.
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié le 20 juin 2018 à 14:57
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
0
Ca marche, merci bien :)

Je suis assez novice sur python ^^

CestCa
0