Obtener las partes de una ruta de una carpeta o archivo en Python

Dado un objeto Path, puede extraer las diferentes partes de la ruta de archivo como cadenas utilizando varios atributos del objeto Path. Éstos pueden ser útiles para construir nuevas rutas de archivos basadas en las existentes. Los atributos se muestran en la imagen.

Las partes de una ruta de archivo de Windows (arriba) y macOS/Linux (abajo)

Las partes de una ruta de archivo incluyen lo siguiente:

  • El ancla (anchor), que es la carpeta raíz del sistema de archivos
  • En Windows, la unidad (drive), que es la letra única que suele denotar un disco duro físico u otro dispositivo de almacenamiento
  • El padre (Parent), que es la carpeta que contiene el archivo
  • El nombre (name) del archivo, compuesto por la raíz (o nombre base) y el sufijo (o extensión)

Tenga en cuenta que los objetos Path de Windows tienen un atributo drive, pero los objetos Path de macOS y Linux no. El atributo drive no incluye la primera barra invertida.

Para extraer cada atributo de la ruta del archivo, introduzca lo siguiente en el shell interactivo:

>>> from pathlib import Path 
>>> p = Path('C:/Users/Al/spam.txt')
>>> p.anchor
'C:\\'
>>> p.parent # This is a Path object, not a string.
WindowsPath('C:/Users/Al')
>>> p.name
'spam.txt'
>>> p.stem
'spam'
>>> p.suffix
'.txt'
>>> p.drive
'C:'

En Linux se vería así:

>>> from pathlib import Path 
>>> Path.home()
PosixPath('/home/Al')
>>> Path.home().anchor
'/'
>>> Path.home().drive
''

Note como se hablo anteriormente, Linux y Mac no tienen drive en su ruta a causa de esto devuelve una cadena vaciá cuando se es llamando.

Estos atributos se evalúan a valores de cadena simples, excepto parent, que se evalúa a otro objeto Path.

El atributo parents (que es diferente del atributo parent) se evalúa a las carpetas ascendiente de un objeto Path con un índice entero:

>>> Path.cwd()
WindowsPath('C:/Users/Al/AppData/Local/Programs/Python/Python37')
>>> Path.cwd().parents[0]
WindowsPath('C:/Users/Al/AppData/Local/Programs/Python')
>>> Path.cwd().parents[1]
WindowsPath('C:/Users/Al/AppData/Local/Programs')
>>> Path.cwd().parents[2]
WindowsPath('C:/Users/Al/AppData/Local')
>>> Path.cwd().parents[3]
WindowsPath('C:/Users/Al/AppData')
>>> Path.cwd().parents[4]
WindowsPath('C:/Users/Al')
>>> Path.cwd().parents[5]
WindowsPath('C:/Users')
>>> Path.cwd().parents[6]
WindowsPath('C:/')

El antiguo módulo os.path también tiene funciones similares para obtener las diferentes partes de una ruta escrita en un valor de cadena. Llamar a os.path.dirname(path) devolverá una cadena con todo lo que viene antes de la última barra en el argumento de la ruta. Al llamar a os.path.basename(path) se obtiene una cadena con todo lo que viene después de la última barra en el argumento de la ruta. El nombre del directorio (o dir) y el nombre base (base name) de una ruta se muestran en la imagen.

El nombre base sigue a la última barra en una ruta y es el mismo que el nombre del archivo. El nombre dir es todo lo que está antes de la última barra.

Por ejemplo, introduzca lo siguiente en el shell interactivo:

>>> import os
>>> calcFilePath = 'C:\\Windows\\System32\\calc.exe'
>>> os.path.basename(calcFilePath)
'calc.exe'
>>> os.path.dirname(calcFilePath)
'C:\\Windows\\System32'

Si necesita el nombre de la ruta y el nombre base juntos, puede llamar a os.path.split() para obtener un valor de tupla con estas dos cadenas, así:

>>> calcFilePath = 'C:\\Windows\\System32\\calc.exe'
>>> os.path.split(calcFilePath)
('C:\\Windows\\System32', 'calc.exe')

Observa que podrías crear la misma tupla llamando a os.path.dirname() y os.path.basename() y colocando sus valores de retorno en una tupla:

>>> (os.path.dirname(calcFilePath), os.path.basename(calcFilePath))
('C:\\Windows\\System32', 'calc.exe')

Pero os.path.split() es un buen atajo si necesitas ambos valores.

Además, tenga en cuenta que os.path.split() no toma una ruta de archivo y devuelve una lista de cadenas de cada carpeta. Para eso, utilice el método de cadena split() y divida en la cadena en os.sep. (Tenga en cuenta que sep está en os, no en os.path.) La variable os.sep está configurada con la barra de separación de carpetas correcta para el ordenador que ejecuta el programa, ‘\\‘ en Windows y ‘/‘ en macOS y Linux, y al dividir sobre ella se obtendrá una lista de las carpetas individuales.

Por ejemplo, introduzca lo siguiente en el shell interactivo:

>>> calcFilePath.split(os.sep)
['C:', 'Windows', 'System32', 'calc.exe']

Esto devuelve todas las partes de la ruta como cadenas.

En los sistemas macOS y Linux, la lista de carpetas devuelta comenzará con una cadena en blanco, de la siguiente manera

>>> '/usr/bin'.split(os.sep)
['', 'usr', 'bin']

El método de cadena split() funcionará para devolver una lista de cada parte de la ruta.

Deja una respuesta