214 votes

Extraire une partie du chemin de fichier (un répertoire) en Python

J'ai besoin d'extraire le nom du répertoire parent d'un certain chemin. Voici à quoi ça ressemble :

C:\stuff\directory_i_need\subdir\file.jpg

Je voudrais extraire directory_i_need.

292voto

Nisan.H Points 1605
import os
## first file in current dir (with full path)
file = os.path.join(os.getcwd(), os.listdir(os.getcwd())[0])
file
os.path.dirname(file) ## directory of file
os.path.dirname(os.path.dirname(file)) ## directory of directory of file
...

Et vous pouvez continuer à le faire autant de fois que nécessaire...

Éditer : depuis os.path, vous pouvez utiliser soit os.path.split ou os.path.basename :

dir = os.path.dirname(os.path.dirname(file)) ## dir of dir of file
## once you're at the directory level you want, with the desired directory as the final path node:
dirname1 = os.path.basename(dir) 
dirname2 = os.path.split(dir)[1] ## if you look at the documentation, this is exactly what os.path.basename does.

72voto

Noam Manos Points 145

Pour Python 3.4+, essayez le modulepathlib :

>>> from pathlib import Path

>>> p = Path('C:\\Program Files\\Internet Explorer\\iexplore.exe')

>>> str(p.parent)
'C:\\Program Files\\Internet Explorer'

>>> p.name
'iexplore.exe'

>>> p.suffix
'.exe'

>>> p.parts
('C:\\', 'Program Files', 'Internet Explorer', 'iexplore.exe')

>>> p.relative_to('C:\\Program Files')
WindowsPath('Internet Explorer/iexplore.exe')

>>> p.exists()
True

26voto

prosti Points 4630

Tout ce dont vous avez besoin est parent part si vous utilisez pathlib.

from pathlib import Path
p = Path(r'C:\Program Files\Internet Explorer\iexplore.exe')
print(p.parent) 

Sortie Will :

C:\Program Files\Internet Explorer    

Cas où vous avez besoin de toutes les pièces (déjà couvertes dans d'autres réponses) utilisez parts :

p = Path(r'C:\Program Files\Internet Explorer\iexplore.exe')
print(p.parts) 

Ensuite, vous obtiendrez une liste :

('C:\\', 'Program Files', 'Internet Explorer', 'iexplore.exe')

Gain de temps.

5voto

EMS Points 9249

Tout d'abord, vérifiez si vous avez splitunc() comme fonction disponible dans os.path. Le premier élément retourné devrait être ce que vous voulez... mais je suis sous Linux et je n'ai pas cette fonction lorsque j'importe os et que j'essaie de l'utiliser.

Dans le cas contraire, une façon semi-ugide de faire le travail est d'utiliser :

>>> pathname = "\\C:\\mystuff\\project\\file.py"
>>> pathname
'\\C:\\mystuff\\project\\file.py'
>>> print pathname
\C:\mystuff\project\file.py
>>> "\\".join(pathname.split('\\')[:-2])
'\\C:\\mystuff'
>>> "\\".join(pathname.split('\\')[:-1])
'\\C:\\mystuff\\project'

qui affiche la récupération du répertoire juste au-dessus du fichier, et du répertoire juste au-dessus de cela.

2voto

Basti Würzburg Points 21
import os

directory = os.path.abspath('\\') # root directory
print(directory) # e.g. 'C:\'

directory = os.path.abspath('.') # current directory
print(directory) # e.g. 'C:\Users\User\Desktop'

parent_directory, directory_name = os.path.split(directory)
print(directory_name) # e.g. 'Desktop'
parent_parent_directory, parent_directory_name = os.path.split(parent_directory)
print(parent_directory_name) # e.g. 'User'

Cela devrait également faire l'affaire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X