El módulo Pathlib en Python simplifica la forma de trabajar con archivos y carpetas. El módulo Pathlib está disponible en Python 3.4 y versiones superiores. Combina lo mejor de los módulos del sistema de archivos de Python, a saber os, os.path, globetc.
En Python, la mayoría de los scripts implican interactuar con sistemas de archivos. Por lo tanto, es importante ocuparse de los nombres de archivo y las rutas. Para lograr esto, Python incluye el módulo Pathlib que contiene funciones útiles para realizar tareas relacionadas con archivos. Pathlib proporciona una forma más legible y fácil de construir rutas al representar las rutas del sistema de archivos como objetos adecuados y nos permite escribir código que es portátil entre plataformas.
En este artículo, estudiaremos el módulo Pathlib en detalle con la ayuda de varios ejemplos.
El concepto de ruta y directorio
Contenido
Antes de avanzar más en los detalles del módulo Pathlib, es importante comprender 2 conceptos diferentes, a saber: ruta y directorio.
La ruta se usa para identificar un archivo. La ruta proporciona una secuencia opcional de nombres de directorio terminados por el nombre de archivo final, incluida la extensión del nombre de archivo. La extensión del nombre de archivo proporciona información sobre el formato / contenido del archivo. El módulo Pathlib puede manejar tanto rutas absolutas como relativas. Una ruta absoluta comienza desde el directorio raíz y especifica el árbol de directorios completo, mientras que una ruta relativa, como sugiere el nombre, es la ruta de un archivo relativa a otro archivo o directorio (generalmente el directorio actual).
El directorio representa la entrada del sistema de archivos de la ruta e incluye el nombre del archivo, la hora de creación, el tamaño, el propietario, etc.
Te puede interesar:Lista doblemente enlazada con ejemplos de PythonEl módulo Pathlib en Python se ocupa de las tareas relacionadas con la ruta, como la construcción de nuevas rutas a partir de nombres de archivos y otras rutas, la comprobación de varias propiedades de las rutas y la creación de archivos y carpetas en rutas específicas.
¿Cómo utilizar el módulo Pathlib?
Para usar el módulo pathlib convenientemente dentro de nuestros scripts, importamos todas las clases en él usando:
from pathlib import *
Como primera tarea, recuperemos el directorio de trabajo actual y los objetos del directorio de inicio, respectivamente, usando el siguiente código:
current_dir = Path.cwd()
home_dir = Path.home()
print(current_dir)
print(home_dir)
Podemos elegir import pathlib
en lugar de importar todas las clases. En ese caso, todos los usos posteriores de las clases dentro del módulo deben tener el prefijo pathlib
.
import pathlib
current_dir = pathlib.Path.cwd()
home_dir = pathlib.Path.home()
print(current_dir)
print(home_dir)
¿Por qué utilizar el módulo Pathlib?
Si ha estado trabajando con el lenguaje Python durante un tiempo, se preguntará cuál es la necesidad del módulo Pathlib cuando os
, os.path
, glob
, etc. ¿Los módulos ya están disponibles? Ésta es una preocupación plenamente justificada. Intentemos abordar esto con un ejemplo.
Digamos que queremos crear un archivo llamado «output / output.xlsx» dentro del directorio de trabajo actual. El siguiente código intenta lograr esto usando el os.path
módulo. Para esto, os.getcwd
y os.path.join
se utilizan funciones.
import os
outpath = os.path.join(os.getcwd(), 'output')
outpath_file = os.path.join(outpath, 'out.xlsx')
Alternativamente,
outpath_file = os.pathjoin(os.path.join(os.getcwd(), 'output'), "out.xlsx")
Aunque el código funciona, parece torpe y no es legible ni fácil de mantener. Imagínese cómo se vería este código si quisiéramos crear un nuevo archivo dentro de varios directorios anidados.
El mismo código se puede reescribir usando el módulo Pathlib, de la siguiente manera:
from pathlib import Path
outpath = Path.cwd() / 'output"https://Pharos.sh.com/"output.xlsx'
Este formato es más fácil de analizar mentalmente. En Pathlib, el Path.cwd()
La función se usa para obtener el directorio de trabajo actual y /
operador se utiliza en lugar de os.path.join
para combinar partes de la ruta en un objeto de ruta compuesta. El patrón de anidación de funciones en el os.path
módulo es reemplazado por el Path
clase de módulo Pathlib que representa la ruta encadenando métodos y atributos. La inteligente sobrecarga del /
El operador hace que el código sea legible y fácil de mantener.
Otro beneficio del método proporcionado por el módulo Pathlib es que un Path
El objeto se crea en lugar de crear una representación de cadena de la ruta. Este objeto tiene varios métodos útiles que hacen la vida más fácil que trabajar con cadenas sin procesar que representan rutas.
Realización de operaciones en caminos
El clásico os.path
El módulo se utiliza solo para manipular cadenas de ruta. Para hacer algo con la ruta, por ejemplo, crear un directorio, necesitamos el os
módulo. los os
El módulo proporciona un conjunto de funciones para trabajar con archivos y directorios, como: mkdir
para crear un directorio, rename
para cambiar el nombre de un directorio, getsize
para obtener el tamaño de un directorio y así sucesivamente.
Escribamos algunas de estas operaciones usando el os
módulo y luego reescriba el mismo código usando el módulo Pathlib.
Código de muestra escrito usando os
módulo:
if os.path.isdir(path):
os.rmdir(path)
Si usamos el módulo Pathlib path
objetos para lograr la misma funcionalidad, el código resultante será mucho más legible y más fácil de mantener como se muestra a continuación:
if path.is_dir()
path.rmdir()
Es engorroso encontrar utilidades relacionadas con la ruta en el os
módulo. El módulo Pathlib resuelve el problema reemplazando las utilidades de os
módulo con métodos en objetos de ruta. Entendamos esto aún mejor con un código:
outpath = os.path.join(os.getcwd(), 'output')
outpath_tmp = os.path.join(os.getcwd(), 'output.tmp')
generate_data(output_tmp)
if os.path.getsize(output_tmp):
os.rename(outpath_tmp, outpath)
else: # Nothing produced
os.remove(outpath_tmp)
Aquí, la función generate_data()
toma una ruta de archivo como parámetro y escribe datos en otra ruta. Sin embargo, si el archivo que se pasa como parámetro no se cambia, desde la última vez que generate_data()
se ejecutó la función, se genera un archivo vacío. En ese caso, el archivo vacío se reemplaza con la versión anterior del archivo.
La variable outpath
almacena los datos uniendo el directorio de trabajo actual con el nombre de archivo «salida». También creamos una versión temporal, llamada outpath.tmp
. Si el tamaño de la versión temporal no es cero, lo que implica que no es un archivo vacío, se cambia el nombre de la versión temporal a outpath
, de lo contrario, se elimina la versión temporal y se conserva la versión anterior.
Utilizando la os
módulo, manipulando las rutas de los sistemas de archivos a medida que los objetos de cadena se vuelven torpes ya que os.path.join()
, os.getcwd()
, etc. Para evitar este problema, el módulo Pathlib ofrece un conjunto de clases que se pueden usar para operaciones de uso frecuente en la ruta, de una manera más legible, simple y orientada a objetos.
Intentemos reescribir el código anterior usando el módulo Pathlib.
from pathlib import Path
outpath = Path.cwd() / 'output'
outpath_tmp = Path.cwd() / 'output_tmp'
generate_data(output_tmp)
if outpath_tmp.stat().st_size:
outpath_tmp.rename(outpath)
else: # Nothing produced
Path_tmp.unlink()
Con Pathlib, os.getcwd () se convierte en Path.cwd () y el operador «https://Pharos.sh.com/» se usa para unir rutas y se usa en lugar de os.path.join. Usando el módulo Pathlib, las cosas se pueden hacer de una manera más simple usando operadores y llamadas a métodos.
Los siguientes son métodos de uso común y su uso:
Path.cwd()
: Objeto de ruta de retorno que representa el directorio de trabajo actualPath.home()
: Objeto de ruta de retorno que representa el directorio de inicioPath.stat()
: devuelve información sobre la rutaPath.chmod()
: cambiar el modo de archivo y los permisosPath.glob(pattern)
: Glob el patrón dado en el directorio que está representado por la ruta, produciendo archivos coincidentes de cualquier tipoPath.mkdir()
: para crear un nuevo directorio en la ruta dadaPath.open()
: Para abrir el archivo creado por la rutaPath.rename()
: Cambia el nombre de un archivo o directorio al destino dadoPath.rmdir()
: Eliminar el directorio vacíoPath.unlink()
: Elimina el archivo o enlace simbólico
Generación de rutas multiplataforma
Las rutas utilizan diferentes convenciones en diferentes sistemas operativos. Windows usa una barra invertida entre los nombres de las carpetas, mientras que todos los demás sistemas operativos populares usan una barra inclinada entre los nombres de las carpetas. Si desea que su código Python funcione, independientemente del sistema operativo subyacente, deberá manejar las diferentes convenciones específicas de la plataforma subyacente. El módulo Pathlib facilita el trabajo con rutas de archivo. En Pathlib, puede simplemente pasar una ruta o un nombre de archivo a Path()
objeto mediante barra diagonal, independientemente del sistema operativo. Pathlib se encarga del resto.
pathlib.Path.home() / 'python"https://Pharos.sh.com/"samples"https://Pharos.sh.com/"test_me.py'
los Path()
objeto encubrirá el /
al tipo de barra inclinada apto, para el sistema operativo subyacente. los pathlib.Path
puede representar la ruta de Windows o Posix. Por lo tanto, Pathlib resuelve una gran cantidad de errores de funciones cruzadas, manejando rutas fácilmente.
Obtener información de ruta
Mientras tratamos con rutas, nos interesa encontrar el directorio principal de un archivo / carpeta o seguir enlaces simbólicos. La clase de ruta tiene varios métodos para hacer esto, ya que diferentes partes de una ruta están disponibles como propiedades que incluyen lo siguiente:
drive
: una cadena que representa el nombre de la unidad. Por ejemplo,PureWindowsPath('c:/Program Files/CSV').drive
devuelve «C:»parts
: devuelve una tupla que proporciona acceso a los componentes de la rutaname
: el componente de ruta sin ningún directorioparent
: secuencia que proporciona acceso a los antepasados lógicos de la rutastem
: componente de ruta final sin su sufijosuffix
: la extensión de archivo del componente finalanchor
: la parte de una ruta antes del directorio./
se utiliza para crear trayectorias secundarias e imita el comportamiento deos.path.join
.joinpath
: combina la ruta con los argumentos proporcionadosmatch(pattern)
: devuelve Verdadero / Falso, basado en hacer coincidir la ruta con el patrón de estilo glob proporcionado
En la ruta «/home/projects/Pharos.sh/python/sample.md»:
path
: – devuelve PosixPath (‘/ inicio / proyectos / Pharos.sh / python / sample.md’)path.parts
: – devuelve («https://Pharos.sh.com/», ‘inicio’, ‘proyectos’, ‘Pharos.sh’, ‘python’)path.name
: – devuelve ‘sample.md’path.stem
: – devuelve ‘muestra’path.suffix
: – devuelve ‘.md’path.parent
: – devuelve PosixPath (‘/ inicio / proyectos / Pharos.sh / python’)path.parent.parent
: – devuelve PosixPath (‘/ inicio / proyectos / Pharos.sh’)path.match('*.md')
: devuelve TruePurePosixPath('/python').joinpath('edited_version')
: devuelve (‘inicio / proyectos / Pharos.sh / python / edited_version
Alternativa del módulo Glob
Aparte de os
, os.path
módulos, glob
El módulo también está disponible en Python y proporciona utilidades relacionadas con la ruta del archivo. glob.glob
función de la glob
El módulo se utiliza para buscar archivos que coincidan con un patrón.
from glob import glob
top_xlsx_files = glob('*.xlsx')
all_xlsx_files = glob('**/*.xlsx', recursive=True)
El pathlib también proporciona utilidades globales:
from pathlib import Path
top_xlsx_files = Path.cwd().glob('*.xlsx')
all_xlsx_files = Path.cwd().rglob('*.xlsx')
La funcionalidad glob está disponible con Path
objetos. Por lo tanto, los módulos pathlib simplifican las tareas complejas.
Lectura y escritura de archivos usando Pathlib
Los siguientes métodos se utilizan para realizar operaciones básicas como leer y escribir archivos:
Te puede interesar:Administradores de contexto de Pythonread_text
: El archivo se abre en modo texto para leer el contenido del archivo y cerrarlo después de leerlo.read_bytes
: Se utiliza para abrir el archivo en modo binario y devolver el contenido en forma binaria y cierra el archivo después del mismo.write_text
: Se usa para abrir el archivo y escribe texto y lo cierra más tardewrite_bytes
: Se utiliza para escribir datos binarios en un archivo y cierra el archivo, una vez hecho esto
Exploremos el uso del módulo Pathlib para operaciones comunes de archivos. El siguiente ejemplo se utiliza para leer el contenido de un archivo:
path = pathlib.Path.cwd() / 'Pathlib.md'
path.read_text()
Aquí, read_text
método en Path
El objeto se utiliza para leer el contenido del archivo.
El siguiente ejemplo se utiliza para escribir datos en un archivo, en modo texto:
from pathlib import Path
p = Path('sample_text_file') p.write_text('Sample to write data to a file')
Por lo tanto, en el módulo Pathlib, al tener la ruta como un objeto nos permite realizar acciones útiles en los objetos para el sistema de archivos que implican una gran cantidad de manipulación de rutas como crear o eliminar directorios, buscar archivos específicos, mover archivos, etc.
Conclusión
Para concluir, el módulo Pathlib proporciona una gran cantidad de características útiles y enriquecidas que se pueden utilizar para realizar una variedad de operaciones relacionadas con la ruta. Como ventaja adicional, la biblioteca es coherente en todo el sistema operativo subyacente.