Je sais que pour aller dans un répertoire parent, vous devez utiliser

parentname = os.path.abspath(os.path.join(yourpath, os.path.pardir))

Mais que se passe-t-il si je veux obtenir le nom d'un répertoire de quelques dossiers?

Dites que l'on me donne / stuff / home / blah / pictures / myaccount / album, et je veux obtenir les noms des deux derniers dossiers de "myaccount" et "album" (pas les chemins, juste les noms) à utiliser dans mon scénario. Comment je fais ça?

3
user1058492 22 nov. 2011 à 08:03

3 réponses

Meilleure réponse
>>> p='/stuff/home/blah/pictures/myaccount/album'
>>> os.path.abspath(p).split(os.sep)[-1]
'album'
>>> os.path.abspath(p).split(os.sep)[-2]
'myaccount'
>>> os.path.abspath(p).split(os.sep)[-3]
'pictures'
>>> os.path.abspath(p).split(os.sep)[-4]
'blah'

Etc...

2
the wolf 22 nov. 2011 à 06:29

Qu'en est-il de diviser le chemin d'accès à la liste et d'obtenir les deux derniers éléments?

>>> import os
>>> path_str = ' /stuff/home/blah/pictures/myaccount/album'
>>> path_str.split(os.sep)
[' ', 'stuff', 'home', 'blah', 'pictures', 'myaccount', 'album']

Pour le chemin relatif tel que . et .., os.path.abspath() peut être utilisé pour prétraiter la chaîne de chemin.

>>> import os
>>> path_str = os.path.abspath('.')
>>> path_str.split(os.sep)
['', 'tmp', 'foo', 'bar', 'foobar']
2
hzm 22 nov. 2011 à 04:25

Il ne semble pas y avoir quelque chose de particulièrement élégant, mais cela devrait faire l'affaire:

>>> yourpath = "/stuff/home/blah/pictures/myaccount/album"
>>> import os.path
>>> yourpath = os.path.abspath(yourpath)
>>> (npath, d1) = os.path.split(yourpath)
>>> (npath, d2) = os.path.split(npath)
>>> print d1
album
>>> print d2
myaccount

Gardez à l’esprit que os.path.split reviendra une chaîne vide pour le deuxième composant si le chemin d'accès fourni se termine par une barre oblique de fin, vous pouvez donc vous assurer de le supprimer en premier si vous ne validez pas autrement le format du chemin d'accès fourni.

2
Nick Bastin 22 nov. 2011 à 04:22
8221844