Trabajando con ficheros en Python con el módulo 'pathlib'
“Cambia lo superficial,
cambia también lo profundo,
cambia el modo de pensar
cambia todo en este mundo [..] "
.- Mercedes Sosa
El autor de El Libro de Python sugiere usar el módulo os. Indagando un poco más, uno aprende que hoy en día hay una forma más ‘idiomática’ o ‘pytónica’ de programar python para el manejo de ficheros del sistema. La librería recientemente ha dejado obsoleta a os es pathlib (disponible desde la versión 3.6 de Python)
Usando os para el manejo de ficheros
Veamos, el ‘modus operandi’ que propone el Libro de Python :
NOTA: transcribo literalmente de El Libro de Python
En este ejemplo vemos como trabajar con ficheros usando os. Vemos como:
- 🖌️ Crear ficheros
- 🔄 Modificar el nombre de ficheros
- 🗑️ Eliminar ficheros y carpetas
🖌️ Veamos como crear varios ficheros. Los creamos vacíos, pero puedes usar cambiar el write para añadir contenido si lo deseas.
import os
def crea_ficheros(ruta, nombre, cantidad):
if not os.path.exists(ruta):
os.makedirs(ruta)
import os
for i in range(cantidad):
archivo_ruta = os.path.join(ruta, f"{nombre}_{i}.txt")
with open(archivo_ruta, 'w') as fichero:
fichero.write('')
print(f"Creado: {archivo_ruta}")
Si llamamos a la función, crearemos 10 ficheros en la carpeta ejemplo con nombres desde fichero_1.txt hasta fichero_9.txt.
crea_ficheros("./ejemplo", "fichero", 10)
obtendremos la salida siguiente en nuestra terminal :
$ python3 trabajando-con-ficheros-i.py
Creado: ./ejemplo/fichero_0.txt
Creado: ./ejemplo/fichero_1.txt
Creado: ./ejemplo/fichero_2.txt
Creado: ./ejemplo/fichero_3.txt
Creado: ./ejemplo/fichero_4.txt
Creado: ./ejemplo/fichero_5.txt
Creado: ./ejemplo/fichero_6.txt
Creado: ./ejemplo/fichero_7.txt
Creado: ./ejemplo/fichero_8.txt
Creado: ./ejemplo/fichero_9.txt
NOTA: fin de la transcripción literal de El Libro de Python
Usando pathlib para el manejo de ficheros 🔄
Veamos como modificar el script anterior con el más ‘pitónico’ pathlib
from pathlib import Path
def crea_ficheros(ruta, nombre, cantidad):
directorio = Path(ruta)
directorio.mkdir(parents=True, exist_ok=True)
for i in range(cantidad):
archivo = directorio / f"{nombre}_{i}.txt"
archivo.write_text('')
print(f"Creado: {archivo}")
crea_ficheros("./ejemplo", "fichero", 10)
Los cambios principales de os → pathlib:
os |
pathlib |
|---|---|
os.path.exists(ruta) + os.makedirs(ruta) |
Path(ruta).mkdir(parents=True, exist_ok=True) |
os.path.join(ruta, nombre) |
directorio / nombre (operador /) |
open(archivo, 'w') + write('') |
archivo.write_text('') |
pathlib es más expresivo y orientado a objetos: el Path encapsula todas las operaciones sobre rutas, y el operador / hace la concatenación de paths mucho más legible que os.path.join.