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?
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')
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')
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')
Voici le code:
import os
existGDBPath = r'T:\Data\DBDesign\DBDesign_93_v141b.mdb'
wkspFldr = os.path.dirname(existGDBPath)
print wkspFldr # T:\Data\DBDesign
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
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