2013-06-12 25 views
51

Ho visto questa soluzione ma non specificamente per Python.Python - Estrai percorso cartella dal percorso file

Mi piacerebbe ottenere solo il percorso della cartella dal percorso completo di un file.

Ad esempio T:\Data\DBDesign\DBDesign_93_v141b.mdb e mi piacerebbe ottenere solo T:\Data\DBDesign (escluso il \DBDesign_93_v141b.mdb).

Ho provato qualcosa di simile:

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

ma mi ha dato un risultato come questo:

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

che non è il risultato che ho bisogno (essendo T:\Data\DBDesign).

Qualche idea su come ottenere il percorso del mio file?

Grazie.

risposta

71

Eravate quasi arrivati ​​con l'uso della funzione split. Hai solo bisogno di unirti alle stringhe, come segue.

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

Anche se, mi consiglia di utilizzare la funzione os.path.dirname per fare questo, è solo bisogno di passare la stringa, e lo farà il lavoro per voi. Dal momento che sembra che tu sia su Windows, considera anche l'uso della funzione abspath. Un esempio -

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

Se si desidera che sia il nome del file e il percorso della directory dopo essere stato diviso, è possibile utilizzare la funzione os.path.split che restituisce una tupla, come segue.

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

brillante, grazie mille per il vostro aiuto qui. Questo è stato molto istruttivo. Userò l'opzione abspath. – Genspec

16

Il sottomodulo incorporato os.path ha una funzione proprio per questo compito.

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

utilizzare il modulo os.path:

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

Si può andare avanti e pensare che se hai bisogno di fare una sorta di manipolazione nome del file è già stato implementato in os.path. In caso contrario, probabilmente sarà necessario utilizzare questo modulo come elemento di base.

UPDATE

Si dovrebbe considerare l'utilizzo di pathlib per un nuovo sviluppo. È in stdlib per Python3.4, ma available on PyPI per versioni precedenti. Questa libreria fornisce un metodo più orientato agli oggetti per manipolare i percorsi <opinion> ed è molto più semplice leggere e programmare con </opinion>.

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

Ecco il codice:

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