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 réponses
>>> 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...
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']
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.
Questions connexes
De nouvelles questions
python
Python est un langage de programmation multi-paradigme, typé dynamiquement et polyvalent. Il est conçu pour être rapide à apprendre, comprendre, utiliser et appliquer une syntaxe propre et uniforme. Veuillez noter que Python 2 est officiellement hors support à partir du 01-01-2020. Néanmoins, pour les questions Python spécifiques à la version, ajoutez la balise [python-2.7] ou [python-3.x]. Lorsque vous utilisez une variante Python (par exemple, Jython, PyPy) ou une bibliothèque (par exemple, Pandas et NumPy), veuillez l'inclure dans les balises.