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


116

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

Par exemple T:\Data\DBDesign\DBDesign_93_v141b.mdbet je voudrais obtenir juste T:\Data\DBDesign(à l'exclusion 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'exige (être T:\Data\DBDesign).

Des idées sur la façon dont je peux obtenir le chemin de mon fichier?

Réponses:


140

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

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

Bien que je recommande d'utiliser la os.path.dirnamefonction pour ce faire, il vous suffit de passer la chaîne et elle fera le travail pour vous. Puisque vous semblez être sous Windows, pensez également à utiliser la abspathfonction. Un exemple:

>>> import os
>>> 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é fractionnés, vous pouvez utiliser la os.path.splitfonction qui renvoie un tuple, comme suit.

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

os.sep.join(existGDBPath.split(os.sep)[:-1]semble plus jolie.
Dave Babbitt

88

AVEC MODULE PATHLIB (RÉPONSE MIS À JOUR)

Il faut envisager d'utiliser pathlib pour les nouveaux développements. Il se trouve dans le 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')

AVEC MODULE OS

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 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 devrez probablement utiliser ce module comme bloc de construction.


Path().parentce que je cherchais!
iedmrc le


4

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

Voici mon petit utilitaire d'aide pour diviser les chemins int, les 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

Toute personne essayant de le faire dans l'interface de calcul de champ ESRI GIS Table peut le faire avec l' analyseur Python :

PathToContainingFolder =

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

pour que

\ Users \ me \ Desktop \ Nouveau dossier \ file.txt

devient

\ Users \ me \ Desktop \ Nouveau dossier

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.