179 votes

Comment extraire le chemin du dossier à partir du chemin du fichier en Python ?

Je voudrais obtenir uniquement le chemin du dossier à partir du chemin complet d'un fichier.

Par exemple T:\Data\DBDesign\DBDesign_93_v141b.mdb et je voudrais juste T:\Data\DBDesign (à l'exclusion de la \DBDesign_93_v141b.mdb ).

J'ai essayé quelque chose comme ça :

existGDBPath = r'T:\Data\DBDesign\DBDesign_93_v141b.mdb'
wkspFldr = str(existGDBPath.split('\\')[0:-1])
print wkspFldr 

mais ça m'a donné un résultat comme celui-ci :

['T:', 'Data', 'DBDesign']

ce qui n'est pas le résultat que je demande (étant donné que T:\Data\DBDesign ).

Une idée sur la façon dont je peux obtenir le chemin vers mon fichier ?

196voto

Sukrit Kalra Points 11349

Vous y étiez presque avec votre utilisation du split fonction. Il suffit de joindre les chaînes de caractères, comme suit.

>>> import os
>>> '\\'.join(existGDBPath.split('\\')[0:-1])
'T:\\Data\\DBDesign'

Cependant, je recommande d'utiliser le os.path.dirname pour ce faire, il vous suffit de passer la chaîne de caractères, et elle fera le travail pour vous. Puisque vous semblez être sous Windows, envisagez d'utiliser la fonction abspath fonction également. Un exemple :

>>> import os
>>> os.path.dirname(os.path.abspath(existGDBPath))
'T:\\Data\\DBDesign'

Si vous souhaitez obtenir à la fois le nom du fichier et le chemin d'accès au répertoire après avoir été divisé, vous pouvez utiliser la fonction os.path.split qui renvoie un tuple, comme suit.

>>> import os
>>> os.path.split(os.path.abspath(existGDBPath))
('T:\\Data\\DBDesign', 'DBDesign_93_v141b.mdb')

117voto

SethMMorton Points 4704

AVEC LE MODULE PATHLIB (RÉPONSE ACTUALISÉE)

Il faut envisager d'utiliser pathlib pour un nouveau développement. Il est dans la stdlib de Python3.4, mais disponible sur PyPI pour les versions antérieures. Cette bibliothèque fournit une méthode plus orientée objet pour manipuler les chemins. <opinion> et est beaucoup plus facile à lire et à programmer avec </opinion> .

>>> import pathlib
>>> existGDBPath = pathlib.Path(r'T:\Data\DBDesign\DBDesign_93_v141b.mdb')
>>> wkspFldr = existGDBPath.parent
>>> print wkspFldr
Path('T:\Data\DBDesign')

AVEC MODULE OS

Utilisez le os.path module :

>>> import os
>>> existGDBPath = r'T:\Data\DBDesign\DBDesign_93_v141b.mdb'
>>> wkspFldr = os.path.dirname(existGDBPath)
>>> print wkspFldr 
'T:\Data\DBDesign'

Vous pouvez supposer que si vous avez besoin de faire une sorte de manipulation de nom de fichier, elle a déjà été implémentée dans os.path . Sinon, vous aurez probablement besoin d'utiliser ce module comme élément de base.

70voto

Dan Allan Points 6172

Le sous-module intégré os.path a une fonction pour cette tâche précise.

import os
os.path.dirname('T:\Data\DBDesign\DBDesign_93_v141b.mdb')

5voto

Victor Lellis Points 313

Voici le code :

import os
existGDBPath = r'T:\Data\DBDesign\DBDesign_93_v141b.mdb'
wkspFldr = os.path.dirname(existGDBPath)
print wkspFldr # T:\Data\DBDesign

1voto

JavaScriptDude Points 140

Voici mon petit utilitaire d'aide pour diviser les chemins d'accès en fichiers et chemins d'accès :

import os    
# usage: file, path = splitPath(s)
def splitPath(s):
    f = os.path.basename(s)
    p = s[:-(len(f))-1]
    return f, p

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