Couper une chaine
Résolu
CestCa
-
CestCa -
CestCa -
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.
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.
1 réponse
-
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-
-
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 -
De rien :-)
Comme le motif à chercher est simple, tu peux aussi le faire sans regexp (et sans ajout deimport 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 -
-