Python-Extrae la ruta de la carpeta de la ruta del archivo


He visto esta solución, pero no específicamente para Python.

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

Por ejemplo T:\Data\DBDesign\DBDesign_93_v141b.mdb y me gustaría obtener solo T:\Data\DBDesign (excluyendo el \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 (siendo T:\Data\DBDesign).

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

Gracias.

Author: Genspec, 2013-06-12

4 answers

Ya casi llegaste con el uso de la función split. Solo necesitabas unir las cuerdas, como sigue.

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

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

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

Si desea que el nombre del archivo y la ruta del directorio se dividan, puede usar la función os.path.split que devuelve una tupla, como seguir.

>>> os.path.split(os.path.abspath(existGDBPath))
('T:\\Data\\DBDesign', 'DBDesign_93_v141b.mdb')
 84
Author: Sukrit Kalra,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-12 04:24:01

Utilice el sistema operativo .path módulo:

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

Puede seguir adelante y asumir que si necesita hacer algún tipo de manipulación de nombre de archivo ya se ha implementado en os.path. Si no, es probable que todavía necesite usar este módulo como bloque de construcción.

ACTUALIZACIÓN

Uno debería considerar usar pathlib para un nuevo desarrollo. Está en el stdlib para Python3.4, pero está disponible en PyPI para versiones anteriores. Esta biblioteca proporciona un más método objeto-orented para manipular rutas <opinion> y es mucho más fácil de leer y programar con </opinion>.

>>> import pathlib
>>> existGDBPath = pathlib.Path(r'T:\Data\DBDesign\DBDesign_93_v141b.mdb')
>>> wkspFldr = existGDBPath.parent
>>> print wkspFldr
Path('T:\Data\DBDesign')
 47
Author: SethMMorton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-08 00:34:49

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

import os
os.path.dirname('T:\Data\DBDesign\DBDesign_93_v141b.mdb')
 24
Author: Dan Allan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-14 19:30:33

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
Author: Victor Lellis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-12 04:20:29