Come posso estrarre il percorso della cartella dal percorso del file in Python?


116

Vorrei ottenere solo il percorso della cartella dal percorso completo a un file.

Ad esempio T:\Data\DBDesign\DBDesign_93_v141b.mdbe vorrei 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 di cui ho bisogno (essere T:\Data\DBDesign).

Delle idee su come posso ottenere il percorso al mio file?

Risposte:


140

Eri quasi arrivato con il tuo uso della splitfunzione. Hai solo bisogno di unire le corde, come segue.

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

Sebbene, consiglierei di utilizzare la os.path.dirnamefunzione per farlo, devi solo passare la stringa e farà il lavoro per te. Dato che sembra che tu sia su Windows, considera l'utilizzo anche della abspathfunzione. Un esempio:

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

Se si desidera sia il nome del file che il percorso della directory dopo essere stati divisi, è possibile utilizzare la os.path.splitfunzione che restituisce una tupla, come segue.

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

os.sep.join(existGDBPath.split(os.sep)[:-1]sembra più carina.
Dave Babbitt

88

CON MODULO PATHLIB (RISPOSTA AGGIORNATA)

Si dovrebbe considerare l'utilizzo di pathlib per il nuovo sviluppo. È nello stdlib per Python3.4, ma disponibile su PyPI per le versioni precedenti. Questa libreria fornisce un metodo più orientato agli oggetti per manipolare i percorsi <opinion>ed è molto più facile da 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')

CON MODULO OS

Usa 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'

Puoi andare avanti e presumere che se hai bisogno di fare una sorta di manipolazione del nome del file è già stato implementato in os.path. In caso contrario, probabilmente dovrai ancora utilizzare questo modulo come elemento costitutivo.


Path().parentquello che stavo cercando!
iedmrc

44

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

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

4

Ecco il codice:

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

0

Ecco il mio piccolo aiuto di utilità per dividere i percorsi nel file int, i token del percorso:

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

0

Chiunque tenti di eseguire questa operazione nell'interfaccia del calcolatore del campo Tabella ESRI GIS può farlo con il parser Python :

PathToContainFolder =

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

così che

\ Users \ me \ Desktop \ Nuova cartella \ file.txt

diventa

\ Users \ me \ Desktop \ Nuova cartella

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.