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.