Introducción al módulo de Python Pathlib

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: os , os.path , glob , etc.
En Python, la mayoría de los scripts implican interactuar con sistemas de archivos. Por lo tanto, es importante tratar con nombres de archivos y 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 fácil de leer y de construir rutas representando las rutas del sistema de archivos como objetos adecuados y nos permite escribir código que sea portátil en todas las plataformas.
En este artículo, estudiaremos el módulo Pathlib en detalle con la ayuda de varios ejemplos.

El concepto de ruta y directorio

Antes de continuar con los detalles del módulo Pathlib, es importante comprender 2 conceptos diferentes, a saber, ruta y directorio.
La ruta se utiliza para identificar un archivo. La ruta proporciona una secuencia opcional de nombres de directorio terminados por el nombre del archivo final, incluida la extensión del nombre del archivo. La extensión del nombre de archivo proporciona información sobre el formato / contenido del archivo. El módulo Pathlib puede tratar con rutas absolutas y relativas. Una ruta absoluta comienza desde el directorio raíz y especifica el árbol de directorios completo, mientras que una ruta relativa, como su nombre indica, es la ruta de un archivo en relación con 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, el tiempo de creación, el tamaño, el propietario, etc.
El 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 de 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 usar 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, utilizando el siguiente código:
current_dir = Path.cwd()  
home_dir = Path.home()  
print(current_dir)  
print(home_dir)  
Podemos elegir en import pathliblugar 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é usar el módulo Pathlib?

Si usted ha estado trabajando con el lenguaje Python por un tiempo, usted estará preguntando ¿cuál es la necesidad de módulo de Pathlib cuando osos.pathglob, etc. módulos ya están disponibles? Esta es una preocupación plenamente justificada. Vamos a tratar de abordar esto a través de un ejemplo.
Digamos que queremos hacer un archivo llamado "output / output.xlsx" dentro del directorio de trabajo actual. El siguiente código intenta lograr esto usando el os.pathmódulo. Para ello, os.getcwdos.path.joinse 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. Imagine 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' / 'output.xlsx'  
Este formato es más fácil de analizar mentalmente. En Pathlib, la Path.cwd()función se usa para obtener el directorio de trabajo actual y /se usa el operador en lugar de os.path.joincombinar partes de la ruta en un objeto de ruta compuesto. El patrón de anidamiento de funciones en el os.pathmódulo se reemplaza por la Pathclase de módulo Pathlib que representa la ruta mediante métodos de encadenamiento y atributos. La inteligente sobrecarga del /operador hace que el código sea legible y fácil de mantener.
Otra ventaja del método proporcionado por el módulo Pathlib es que Pathse crea un objeto en lugar de crear una representación de cadena de la ruta. Este objeto tiene varios métodos prácticos que hacen la vida más fácil que trabajar con cadenas en bruto que representan rutas.

Realizando Operaciones en Senderos

El os.pathmódulo clásico se usa solo para manipular cadenas de ruta. Para hacer algo con la ruta, por ejemplo, creando un directorio, necesitamos el osmódulo. El osmódulo proporciona un conjunto de funciones para trabajar con archivos y directorios, como: mkdirpara crear un directorio, renamecambiar el nombre de un directorio, getsizeobtener el tamaño de un directorio, etc.
Escribamos algunas de estas operaciones usando el osmódulo y luego reescribamos el mismo código usando el módulo Pathlib.
Código de muestra escrito usando el osmódulo:
if os.path.isdir(path):  
    os.rmdir(path)
Si utilizamos los pathobjetos del módulo Pathlib 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 incómodo encontrar aplicaciones relacionadas con la ruta en el osmódulo. El módulo Pathlib resuelve el problema al reemplazar las utilidades del osmódulo con métodos en objetos de ruta. Entendámoslo 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 generate_data()que 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 outpathalmacena los datos uniendo el directorio de trabajo actual con el nombre de archivo "salida". Creamos una versión temporal, también, llamada como outpath.tmpSi el tamaño de la versión temporal no es cero, lo que implica que no es un archivo vacío, entonces se cambia el nombre de outpathla versión temporal, de lo contrario se elimina la versión temporal y se conserva la versión anterior.
Al usar el osmódulo, la manipulación de las rutas de los sistemas de archivos a medida que los objetos de cadena se vuelven torpes, ya que existen múltiples llamadas a 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, en una Manera más legible, sencilla, orientada a objetos.
Intentemos volver a escribir 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()
Al usar Pathlib, os.getcwd () se convierte en Path.cwd () y el operador '/' 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 comúnmente utilizados y su uso:
  • Path.cwd(): Devuelve el objeto de ruta que representa el directorio de trabajo actual
  • Path.home(): Devuelve el objeto de ruta que representa el directorio de inicio
  • Path.stat(): devuelve información sobre el camino
  • Path.chmod(): cambiar el modo de archivo y permisos
  • Path.glob(pattern): Globe el patrón dado en el directorio que está representado por la ruta, produciendo archivos coincidentes de cualquier tipo
  • Path.mkdir(): para crear un nuevo directorio en la ruta dada
  • Path.open(): Para abrir el archivo creado por la ruta.
  • Path.rename(): Renombra un archivo o directorio al objetivo dado
  • Path.rmdir(): Eliminar el directorio vacío
  • Path.unlink(): Eliminar el archivo o enlace simbólico

Generando caminos 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 de 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 archivos. En Pathlib, solo puede pasar una ruta o un nombre de archivo al Path()objeto usando una barra diagonal, independientemente del sistema operativo. Pathlib se encarga del resto.
pathlib.Path.home() / 'python' / 'samples' / 'test_me.py'  
El Path()objeto convertirá el /tipo de barra inclinada, para el sistema operativo subyacente. El pathlib.Pathpuede representar ya sea Windows o ruta POSIX. Por lo tanto, Pathlib resuelve muchos errores funcionales cruzados, manejando las rutas fácilmente.

Obtención de información de ruta

Al tratar con rutas, estamos interesados ​​en encontrar el directorio principal de un archivo / carpeta o en seguir los enlaces simbólicos. La clase de ruta tiene varios métodos convenientes para hacer esto, ya que las 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').drivedevuelve "C:"
  • parts: devuelve una tupla que proporciona acceso a los componentes de la ruta
  • name: el componente de la ruta sin ningún directorio
  • parent: secuencia que proporciona acceso a los ancestros lógicos de la ruta
  • stem: componente final del camino sin su sufijo
  • suffix: la extensión de archivo del componente final
  • anchor: la parte de una ruta antes del directorio. /Se utiliza para crear rutas secundarias e imita el comportamiento de os.path.join.
  • joinpath: combina la ruta con los argumentos proporcionados.
  • match(pattern): devuelve Verdadero / Falso, basado en hacer coincidir la ruta con el patrón de estilo glob proporcionado
En la ruta "/home/projects/stackabuse/python/sample.md":
  • path: - devuelve PosixPath ('/ home / projects / stackabuse / python / sample.md')
  • path.parts: - devuelve ('/', 'inicio', 'proyectos', 'stackabuse', 'python')
  • path.name: - devuelve 'sample.md'
  • path.stem: - devuelve 'muestra'
  • path.suffix: - devuelve '.md'
  • path.parent: - devuelve PosixPath ('/ home / projects / stackabuse / python')
  • path.parent.parent: - devuelve PosixPath ('/ home / projects / stackabuse')
  • path.match('*.md'): devuelve True
  • PurePosixPath('/python').joinpath('edited_version'): devuelve ('home / projects / stackabuse / python / edited_version

Alternativa del Módulo Glob

Aparte de osos.pathmódulos, globel módulo también está disponible en Python que proporciona utilidades relacionadas ruta del archivo. glob.globLa función del globmódulo se utiliza para encontrar 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 proporciona utilidades globales, así como:
from pathlib import Path

top_xlsx_files = Path.cwd().glob('*.xlsx')  
all_xlsx_files = Path.cwd().rglob('*.xlsx')  
La funcionalidad glob está disponible con Pathobjetos. Por lo tanto, los módulos pathlib simplifican las tareas complejas.

Leer y escribir archivos usando Pathlib

Los siguientes métodos se utilizan para realizar operaciones básicas como leer y escribir archivos:
  • read_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 contenidos en formato binario y cierra el archivo después del mismo.
  • write_text: Se utiliza para abrir el archivo y escribe texto y lo cierra más tarde
  • write_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 de archivos comunes. El siguiente ejemplo se utiliza para leer el contenido de un archivo:
path = pathlib.Path.cwd() / 'Pathlib.md'  
path.read_text()  
Aquí, el read_textmétodo en el Pathobjeto se utiliza para leer el contenido del archivo. 
El siguiente ejemplo se utiliza para escribir datos en un archivo, en modo de 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 del sistema de archivos que involucran mucha manipulación de la ruta, 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 enriquecidas y útiles que se pueden usar para realizar una variedad de operaciones relacionadas con la ruta. Como una ventaja adicional, la biblioteca es consistente en todo el sistema operativo subyacente.

Acerca de: Programator

Somos Instinto Programador

0 comentarios:

Publicar un comentario

Dejanos tu comentario para seguir mejorando!

Con tecnología de Blogger.