¿Cómo puedo extraer la ruta de la carpeta de la ruta del archivo en Python?


116

Me gustaría obtener solo la ruta de la carpeta desde la ruta completa hasta un archivo.

Por ejemplo, T:\Data\DBDesign\DBDesign_93_v141b.mdby me gustaría obtener solo T:\Data\DBDesign(excluyendo \DBDesign_93_v141b.mdb).

He intentado algo como esto:

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

pero me dio un resultado como este:

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

que no es el resultado que requiero (ser T:\Data\DBDesign).

¿Alguna idea sobre cómo puedo obtener la ruta a mi archivo?

Respuestas:


140

Casi estaba allí con el uso de la splitfunción. Solo necesitabas unir las cuerdas, como sigue.

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

Aunque recomendaría usar la os.path.dirnamefunción para hacer esto, solo necesita pasar la cadena y hará el trabajo por usted. Dado que parece estar en Windows, considere usar la abspathfunción también. Un ejemplo:

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

Si desea tanto el nombre del archivo como la ruta del directorio después de dividirlo, puede usar la os.path.splitfunción que devuelve una tupla, de la siguiente manera.

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

os.sep.join(existGDBPath.split(os.sep)[:-1]se ve más bonita.
Dave Babbitt

88

CON MÓDULO PATHLIB (RESPUESTA ACTUALIZADA)

Uno debería considerar el uso de pathlib para nuevos desarrollos. Está en stdlib para Python3.4, pero está disponible en PyPI para versiones anteriores. Esta biblioteca proporciona un método más basado en objetos para manipular rutas <opinion>y es mucho más fácil de leer y programar </opinion>.

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

CON MÓDULO OS

Utilice el módulo os.path :

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

Puede continuar y asumir que si necesita hacer algún tipo de manipulación del nombre de archivo, ya se ha implementado en os.path. De lo contrario, probablemente necesitará utilizar este módulo como componente básico.


Path().parentlo que estaba buscando!
iedmrc

44

El submódulo integrado os.path tiene una función para esa misma tarea.

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

4

Aquí está el código:

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

0

Aquí está mi pequeño ayudante de utilidad para dividir rutas de archivo int, tokens de ruta:

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

0

Cualquiera que intente hacer esto en la interfaz de la calculadora de campo de la tabla ESRI GIS puede hacerlo con el analizador de Python :

PathToContainingFolder =

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

así que eso

\ Users \ me \ Desktop \ New folder \ file.txt

se convierte en

\ Users \ me \ Desktop \ Nueva carpeta

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.