Consultas de recursos
Path()
y sus derivados incluyen funcionalidades para explorar directorios,
leer información de los "ficheros" (carpetas y archivos),
etcétera.
En todo este capítulo se asume el uso de la función Path()
:
Búsqueda de archivos y carpetas
Búsqueda simple
Con el método iterdir()
se buscan los archivos y carpetas
contenidas dentro de la ruta indicada.
No se exploran las carpetas internas.
ruta_carpeta: str
objeto_busqueda = Path(ruta_carpeta).iterdir()
rutas_internas = list(objeto_busqueda)
Por ejemplo, para buscar contenidos en la carpeta actual se puede hacer:
objeto_busqueda = Path(".").iterdir()
rutas_internas = list(objeto_busqueda)
y para mostrar las rutas en consola:
Búsqueda recursiva
La búsqueda de todos los elementos internos del directorio elegido
se realiza con el método walk()
.
ruta_carpeta: str
objeto_busqueda = Path(ruta_carpeta).walk(top_down=True)
lista_objetos = list(objeto_busqueda)
El uso es muy similar al del método iterdir()
:
objeto_busqueda = Path(".").walk(top_down=True)
lista_objetos = list(objeto_busqueda)
El resultado de este método es un objeto compuesto. Al convertirlo en lista se obtiene una lista de objetos, cada uno de los cuales tendrá internamente:
- una ruta de carpeta;
- una lista de subcarpetas;
- una lista de archivos.
Toda esta información se obtiene convirtiendo los objetos internos en lista, tal como se ve en el ejemplo:
for directorio in lista_objetos:
[ruta, subdirectorios, archivos ] = list(directorio)
print(f"ruta : {ruta}")
print(f"nombre carpetas: {subdirectorios}")
print(f"nombre archivos: {archivos}")
Búsqueda por patrones
Se dispone de dos métodos para buscar elementos
que cumplan con un patrón de texto específico
llamados glob()
y rglob()
:
Ejemplo de uso: búsqueda recursiva de imagenes en base a su extensión.
objeto = pathlib.Path(ruta).rglob("*.png", case_sensitive=False)
lista_imagenes = list(objeto)
Información del sistema
Carpeta de usuario
Con el método home()
se consulta la carpeta personal del usuario actual:
Carpeta actual del programa
El método cwd()
devuelve la ruta del sistema
donde el programa actual está ubicado:
Información de recursos
Verificar existencia
exists()
devuelve True
si el elemento indicado por la ruta existe, sino da False
.
Estadisticas de archivo
El método stat()
provee información variada sobre el elemento especificado por la ruta:
fechas de creacion y modificacion, espacio en disco, identificadores de usuario y de grupo, etc.
Uso:
El objeto de salida contiene la información en forma de atributos internos. Algunos de ellos son:atributo | información |
---|---|
st_uid |
identificador d usuario |
st_gid |
identificador de grupo |
st_size |
espacio de disco en bytes (si es carpeta no incluye su contenido) |
st_ctime |
fecha creacion - formato POSIX |
st_mtime |
fecha ultima modificacion - formato POSIX |
st_atime |
fecha ultimo acceso - formato POSIX |
Por ejemplo, para consultar las fechas de creación, modificación y ultimo acceso de un elemento:
estadisticas = Path(ruta).stat()
creacion = estadisticas.st_ctime
modificacion = estadisticas.st_mtime
acceso = estadisticas.st_atime
Usuarios y grupos
Los métodos owner()
y group()
son los encargados
de proporcionar información acerca
del usuario propietario de un recurso
y de su grupo de usuarios:
usuario_propietario = Path(ruta_recurso).owner()
grupo_usuario_propietario = Path(ruta_recurso).group()
Manejo de rutas
Comparar
samefile()
es un método que permite comparar dos rutas entre sí
basándose en la estructura de los directorios del sistema anfitrión.
# rutas del sistema (DEBEN existir o da error)
ruta_A: str = "/home"
ruta_B: str = "/etc"
# compara
mismo_ruta = Path(ruta_A).samefile(ruta_B) # 'False'
misma_ruta = Path(ruta_A).samefile(ruta_A) # 'True'
samefile()
sirve también para directorios.
Este metodo es práctico para comparar rutas relativas con rutas absolutas.
Ejemplos:
# comparando directorio actual
ruta_actual = Path().cwd()
iguales = Path(ruta_actual).samefile(".") # 'True'
# rutas al directorio padre
ruta_padre = Path().cwd().parent
iguales = Path(ruta_padre).samefile("../") # 'True'
Convertir
El método absolute()
sirve para convertir la ruta especificada
en ruta absoluta,
basándose en la estructura de los directorios del sistema anfitrión.
El resultado es un objeto WindowsPath
o PosixPath
con la ruta obtenida.
Ejemplo de uso: ruta absoluta del directorio con el ejecutable actual.
Una alternativa superadora es el método resolve()
,
el cual resuelve los enlaces simbólicos que pudiera haber en la ruta.
Expandir
El método expanduser()
convierte las rutas relativas respecto a la carpeta personal
en ruta absoluta en base a la carpeta personal del usuario actual.
Leer enlaces
Los enlaces simbólicos son leídos con el método readlink()
:
El resultado es la ruta guardada dentro del enlace.
Manejo de URIs
El método as_uri()
convierte la ruta de entrada a URI (Unified Resource Identifier).
La ruta no necesita ser existente,
aunque sí debe ser compatible con el sistema anfitrión.
El método complementario es from_uri()
,
al cual se le pasa como argumento la URI obtenida previamente:
Verificar recursos
Se dispone de varios métodos para chequear que existan distintos tipos de elementos: carpetas, archivos, sockets, volumenes , etc.
Estos son los métodos disponibles:
método | descripción |
---|---|
ìs_file() |
archivo |
ìs_dir() |
directorio |
ìs_symlink() |
enlace simbólico |
ìs_junction() |
|
ìs_mount() |
punto de montaje |
ìs_socket() |
socket UNIX |
ìs_fifo() |
cola del sistema (qeue) |
ìs_block_device() |
dispositivo "de bloque": HDD, SDD, CD, etc |
ìs_char_device() |
dispositivo "de caracter": mouse, teclado, joystick, placa audio |
Estos métodos devuelven True
si se cumplen dos condiciones:
- La ruta existe en el sistema;
- La ruta corresponde al tipo de recurso especificado.
Por ejemplo: si se proporciona la ruta de un archivo llamado main.py
dentro de la carpeta del programa
Enlaces simbólicos
La ruta indicada puede ser perteneciente a enlaces simbólicos (symlinks) que apunten al elemento elegido.