web-dev-qa-db-fra.com

Comment puis-je extraire le chemin du dossier du chemin du fichier en Python?

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

Par exemple, T:\Data\DBDesign\DBDesign_93_v141b.mdb et je voudrais obtenir uniquement T:\Data\DBDesign (à l'exception du \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 cela m'a donné un résultat comme celui-ci:

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

ce qui n’est pas le résultat que j’ai besoin (étant T:\Data\DBDesign).

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

89
Genspec

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

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

Bien que, je recommande l'utilisation de la fonction os.path.dirname pour ce faire, il vous suffit de transmettre la chaîne, et le travail sera fait pour vous. Puisque vous semblez être sur Windows, envisagez d’utiliser également la fonction abspath. Un exemple:

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

Si vous souhaitez à la fois le nom de fichier et le chemin du répertoire après la division, 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')
108
Sukrit Kalra

Utilisez le module os.path :

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

Vous pouvez continuer et supposer que si vous devez effectuer une sorte de manipulation de nom de fichier, elle a déjà été implémentée dans os.path. Sinon, vous devrez probablement utiliser ce module comme bloc de construction.

UPDATE

On devrait envisager d'utiliser pathlib pour un nouveau développement. Il est dans la bibliothèque stdlib pour 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')
74
SethMMorton

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

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

Voici le code:

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

Quiconque tente de le faire dans l’interface du calculateur de champs de la table ESRI GIS Table peut le faire avec le analyseur Python:

PathToContainingFolder =

"\\".join(!FullFilePathWithFileName!.split("\\")[0:-1])

pour que

\ Utilisateurs\moi\Bureau\Nouveau dossier\fichier.txt

devient

\ Users\me\Desktop\Nouveau dossier

0
Zipper1365

Voici mon petit utilitaire pour diviser les chemins d'accès fichier int, jetons de chemin:

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