Python-extraire le chemin du dossier du chemin du fichier

J'ai vu cette solution mais pas spécifiquement pour Python.

Je voudrais obtenir juste le chemin du dossier du chemin complet vers un fichier.

Par exemple T:DataDBDesignDBDesign_93_v141b.mdb et je voudrais juste T:DataDBDesign (à l'exclusion de la DBDesign_93_v141b.mdb).

J'ai essayé quelque chose comme ceci:

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

Mais cela m'a donné un résultat comme ceci:

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

Ce qui n'est pas le résultat dont j'ai besoin (étant T:DataDBDesign).

Des idées sur la façon dont je peux obtenir le chemin d'accès à mon fichier?

Merci.

64
demandé sur Genspec 2013-06-12 08:11:12

4 réponses

Vous étiez presque là avec votre utilisation de la fonction split. Vous avez juste besoin de joindre les chaînes, comme suit.

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

Bien que, je recommande d'utiliser la fonction os.path.dirname pour ce faire, il vous suffit de passer la chaîne, et cela fera le travail pour vous. Puisque, vous semblez être sur windows, pensez à utiliser la fonction abspath aussi. Un exemple -

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

Si vous voulez à la fois le nom du fichier et le chemin du répertoire après avoir été divisé, Vous pouvez utiliser la fonction os.path.split qui renvoie un tuple, comme suivre.

>>> os.path.split(os.path.abspath(existGDBPath))
('T:\\Data\\DBDesign', 'DBDesign_93_v141b.mdb')
84
répondu Sukrit Kalra 2013-06-12 04:24:01

Utilisez le système d'exploitation .chemin module:

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

Vous pouvez aller de l'avant et supposer que si vous avez besoin de faire une sorte de manipulation de nom de fichier, il a déjà été implémenté dans os.path. Si ce n'est pas le cas, vous devrez probablement utiliser ce module comme bloc de construction.

Mise à JOUR

On devrait envisager d'utiliser pathlib pour le nouveau développement. Il est dans le stdlib pour Python3.4, mais disponible sur PyPI pour les versions antérieures. Cette bibliothèque fournit un plus méthode objet-orented 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')
47
répondu SethMMorton 2015-01-08 00:34:49

Le sous-module intégré Système d'exploitation.chemin, a une fonction pour cette tâche.

import os
os.path.dirname('T:\Data\DBDesign\DBDesign_93_v141b.mdb')
24
répondu Dan Allan 2018-03-14 19:30:33

Voici le code:

import os
existGDBPath = r'T:\Data\DBDesign\DBDesign_93_v141b.mdb'
wkspFldr = os.path.dirname(existGDBPath)
print wkspFldr # T:\Data\DBDesign
0
répondu Victor Lellis 2013-06-12 04:20:29