2011-04-16 4 views
2

Je cherche une méthode simple pour identifier la dernière position d'une chaîne dans une autre chaîne ... par exemple. Si je devais: file = C:\Users\User\Desktop\go.py
et je voulais recadrer cette façon que file = go.py
python trouver la dernière ligne

Normalement, je dois courir C:\Users\User\Desktop\go.py à travers une boucle + trouver déclaration, et le temps Evey, il a rencontré \ qu'elle demanderait ... est le le dernier \ dans la chaîne? ... Une fois que j'ai trouvé le dernier \ je voudrais alors file = file[last\:len(file)]
Je suis curieux de savoir s'il y a un moyen plus rapide pour faire cela .. de préférence sans boucle.
Quelque chose comme file = [file('\',dernier):len(file)]
S'il n'y a rien comme ce que je l'ai montré ci-dessus ... alors peut-on placer la boucle à l'intérieur du [:] en quelque sorte. Quelque chose comme file = [for i in ...:len(file)]

merci :)

Répondre

9

S'il est seulement sur les chemins de fichiers, vous pouvez utiliser os.path.basename:

>>> import os 
>>> os.path.basename(file) 
'go.py' 

Ou si vous n'êtes pas en cours d'exécution le code sous Windows, vous devez utiliser ntpath au lieu de os.path.

+4

Lorsque vous traitez w/filepaths c'est la meilleure solution. Mais juste pour l'enregistrement: Il y a aussi une méthode 'rfind' en python: http://docs.python.org/library/stdtypes.html#str.rfind –

+0

@OcasoProtal: Vous devriez envisager de poster ceci comme une réponse. –

+0

Comme je l'ai dit: 'rfind' ne semble pas très bien avec les chemins de fichiers, la solution' os.path' est la meilleure. –

0

Pour les manipulations de chemin, vous voulez utiliser os.path. Pour ce problème spécifique, vous voulez utiliser la fonction os.path.basename(path) qui retourne le dernier composant d'un chemin, ou une chaîne vide si le chemin se termine par une barre oblique (c'est-à-dire le chemin d'un dossier plutôt qu'un fichier).

import os.path 

print os.path.basename("C:\Users\User\Desktop\go.py") 

donne:

go.py
5

Vous pouvez diviser la chaîne dans une liste, puis obtenir le dernier index de la liste.

Exemple:

>>> file = 'C:\Users\User\Desktop\go.py' 
>>> print(file.split('\\')[-1]) 
go.py 
+0

Les autres réponses sont bonnes ... mais j'aime la vôtre car elle a une application plus large ... pas seulement dans les chaînes de chemins. – Rhys

+0

Thanks man :) c'est une belle option qui ne nécessite pas l'ajout de dépendances. Je pense que si vous deviez faire face à l'OS non seulement dans cette situation, ajouter une importation supplémentaire serait la meilleure option. –

+2

Vous ne devez pas diviser la chaîne et n'en prendre qu'une partie. C'est à la fois plus lent et plus confus. Une méthode beaucoup plus simple est 'x [x.rfind ('\\') + 1:]' BTW, vous voudrez peut-être éviter le nom 'fichier' pour le nom de votre variable, car il va ombrer l'objet fichier intégré. –

4

Je suis d'accord avec Felix sur que les chemins de fichiers doivent être manipulés à l'aide os.path.basename. Cependant, vous pouvez jeter un oeil à la fonction de chaîne intégrée rpartition.

>>> file = 'C:\Users\User\Desktop\go.py' 
>>> before, separator, after = file.rpartition('\\') 
>>> before 
'C:\\Users\\User\\Desktop' 
>>> separator 
'\\' 
>>> after 
'go.py' 

Il y a aussi la fonction rfind qui vous donne le dernier indice d'une sous-chaîne. Je me rends compte que je suis un peu en retard à la fête, mais puisque c'est l'un des meilleurs résultats lors de la recherche par exemple. "find last in str python" sur Google, je pense que cela pourrait aider quelqu'un à ajouter cette information.

2

Pour le cas général (comme le OP a dit qu'ils aiment la généralisation de la solution fractionnée) ...... essayez la fonction rfind(str).

"myproject-version2.4.5.customext.zip".rfind(".") 

éditer: apologies, je n'avais pas réalisé quel âge ce fil était ...: -/

Questions connexes