Ficheros en Python¶
¿Qué es un fichero?¶
Un fichero (o archivo) es una colección de datos almacenada de forma persistente en el sistema de almacenamiento del ordenador (disco duro, SSD, tarjeta SD...).
A diferencia de las variables, que solo existen mientras el programa está en ejecución, los ficheros conservan la información aunque el programa termine o el equipo se apague.
En el contexto de una aplicación Python, los ficheros son la forma más sencilla de añadir persistencia a los datos: guardar información entre ejecuciones sin necesidad de bases de datos.
En el diseño por capas visto en la unidad anterior, la lectura y escritura de ficheros corresponde a la capa de infraestructura. El dominio no sabe si los datos vienen de un fichero, una base de datos o una API; eso es responsabilidad de los repositorios.
Tipos de ficheros¶
Python distingue dos tipos fundamentales de ficheros:
Ficheros de texto¶
Almacenan información como secuencias de caracteres legibles. Cada carácter se codifica según un estándar (UTF-8, Latin-1...).
Ejemplos: .txt, .csv, .json, .py, .html, .md
Son los más habituales en aplicaciones de gestión de datos y los que trabajaremos principalmente en esta unidad.
Ficheros binarios¶
Almacenan información como secuencias de bytes sin interpretación de texto. No son directamente legibles por humanos.
Ejemplos: .jpg, .png, .pdf, .exe, .zip, .mp3
Para trabajar con ficheros binarios en Python se usa el modo de apertura b, que veremos al final de la unidad.
Rutas: absolutas y relativas¶
Para acceder a un fichero, Python necesita conocer su ruta (la dirección dentro del sistema de ficheros).
Ruta absoluta¶
Indica la ubicación completa desde la raíz del sistema de ficheros:
/home/usuario/proyectos/alumnos/notas.txt (Linux / macOS)
C:\Users\usuario\proyectos\alumnos\notas.txt (Windows)
Ruta relativa¶
Indica la ubicación respecto al directorio de trabajo actual del programa:
Python ejecuta los programas desde el directorio en que se lanza el intérprete, no necesariamente desde donde está el fichero
.py. Por eso es habitual usar rutas relativas al propio script. Veremos cómo hacerlo de forma robusta en la sección de rutas conpathlib.
Separadores según el sistema operativo¶
El separador de directorios es diferente en cada sistema operativo:
| Sistema operativo | Separador |
|---|---|
| Linux / macOS | / |
| Windows | \ |
Para escribir código portable (que funcione en cualquier SO) no se deben concatenar rutas como strings. Usaremos el módulo pathlib, que gestiona esto automáticamente.
Antipatrón: construir rutas concatenando strings
El sistema de ficheros en Python¶
Python proporciona varias herramientas para trabajar con ficheros:
- Función
open(): la función principal para abrir ficheros de texto y binarios - Módulo
pathlib: para construir y manipular rutas de forma portable (recomendado) - Módulo
os.path: versión clásica para operaciones con rutas - Módulo
csv: para leer y escribir ficheros en formato CSV - Módulo
json: para leer y escribir ficheros en formato JSON
En esta unidad aprenderemos a usar todos ellos de forma progresiva, usando como hilo conductor un sistema de gestión de alumnos:
- Leeremos y escribiremos notas en ficheros de texto plano
- Gestionaremos listados de alumnos en ficheros CSV
- Almacenaremos fichas completas de alumnos en ficheros JSON