¿Cómo puedo extraer la ruta de la carpeta de la ruta del archivo en 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 a mi archivo?

Casi llegaste con el uso de la función de 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. Como parece que estás en Windows, considera usar la función abspath también. Un ejemplo –

 >>> 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 dividirse, puede usar la función os.path.split que devuelve una tupla, de la siguiente manera.

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

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 seguir adelante y asumir que si necesita realizar algún tipo de manipulación de nombre de archivo, ya se ha implementado en os.path . Si no es así, es probable que aún debas usar este módulo como elemento fundamental.

ACTUALIZAR

Uno debe considerar el uso de pathlib para el nuevo desarrollo. Está en stdlib para Python3.4, pero está disponible en PyPI para versiones anteriores. Esta biblioteca proporciona un método más orientado a objetos para manipular rutas y es mucho más fácil de leer y progtwigr con .

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

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

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