En Python, quelle commande dois-je utiliser pour obtenir le nom du dossier contenant le fichier avec lequel je travaille?
"C:\folder1\folder2\filename.xml"
Ici "folder2"
ce que je veux obtenir.
La seule chose que j'ai proposée est d'utiliser os.path.split
deux fois:
folderName = os.path.split(os.path.split("C:\folder1\folder2\filename.xml")[0])[1]
Y a-t-il une meilleure façon de le faire?
python
python-3.x
directory
Vasily
la source
la source
Réponses:
Vous pouvez utiliser
dirname
:Et étant donné le chemin complet, vous pouvez vous séparer normalement pour obtenir la dernière partie du chemin. Par exemple, en utilisant
basename
:Tous ensemble:
>>> import os >>> path=os.path.dirname("C:/folder1/folder2/filename.xml") >>> path 'C:/folder1/folder2' >>> os.path.basename(path) 'folder2'
la source
os.path.basename
Vous cherchez à utiliser dirname . Si vous ne voulez que ce répertoire, vous pouvez utiliser os.path.basename ,
Une fois réunis, cela ressemble à ceci:
os.path.basename(os.path.dirname('dir/sub_dir/other_sub_dir/file_name.txt'))
Cela devrait vous donner "other_sub_dir"
Ce qui suit n'est pas l'approche idéale, mais j'ai initialement proposé, en utilisant os.path.split, et obtenir simplement le dernier élément. qui ressemblerait à ceci:
os.path.split(os.path.dirname('dir/sub_dir/other_sub_dir/file_name.txt'))[-1]
la source
str.split
, il est préférable d'utiliseros.path.split
(qui gère mieux les différences des différents systèmes d'exploitation).c'est assez ancien, mais si vous utilisez Python 3.4 ou supérieur, utilisez PathLib .
# using OS import os path=os.path.dirname("C:/folder1/folder2/filename.xml") print(path) print(os.path.basename(path)) # using pathlib import pathlib path = pathlib.PurePath("C:/folder1/folder2/filename.xml") print(path.parent) print(path.parent.name)
la source
os.path.dirname
est ce que vous recherchez -os.path.dirname(r"C:\folder1\folder2\filename.xml")
Assurez-vous de précéder
r
la chaîne afin qu'elle soit considérée comme une chaîne brute.Démo -
In [46]: os.path.dirname(r"C:\folder1\folder2\filename.xml") Out[46]: 'C:\\folder1\\folder2'
Si vous voulez juste
folder2
, vous pouvez utiliseros.path.basename
avec l'exemple ci-dessus -os.path.basename(os.path.dirname(r"C:\folder1\folder2\filename.xml"))
Démo -
In [48]: os.path.basename(os.path.dirname(r"C:\folder1\folder2\filename.xml")) Out[48]: 'folder2'
la source
Vous pouvez obtenir le chemin complet sous forme de chaîne, puis le diviser en une liste à l'aide du caractère séparateur de votre système d'exploitation. Ensuite, vous obtenez le nom du programme, le nom du dossier, etc. en accédant aux éléments de la fin de la liste à l'aide d'indices négatifs.
Comme ça:
import os strPath = os.path.realpath(__file__) print( f"Full Path :{strPath}" ) nmFolders = strPath.split( os.path.sep ) print( "List of Folders:", nmFolders ) print( f"Program Name :{nmFolders[-1]}" ) print( f"Folder Name :{nmFolders[-2]}" ) print( f"Folder Parent:{nmFolders[-3]}" )
La sortie de ce qui précède était la suivante:
Full Path :C:\Users\terry\Documents\apps\environments\dev\app_02\app_02.py List of Folders: ['C:', 'Users', 'terry', 'Documents', 'apps', 'environments', 'dev', 'app_02', 'app_02.py'] Program Name :app_02.py Folder Name :app_02 Folder Parent:dev
la source
vous pouvez utiliser pathlib
from pathlib import Path Path(r"C:\folder1\folder2\filename.xml").parts[-2]
La sortie de ce qui précède était la suivante:
'folder2'
la source