Ficheros binarios¶
¿Cuándo usar el modo binario?¶
Los ficheros de texto almacenan datos como secuencias de caracteres con una codificación determinada (UTF-8, Latin-1...). Los ficheros binarios almacenan datos como secuencias de bytes sin ninguna interpretación de caracteres.
Se usa el modo binario cuando:
- El fichero contiene datos que no son texto: imágenes, audio, vídeo, PDFs, ejecutables, archivos ZIP...
- Se necesita un control exacto byte a byte del contenido
- Se trabaja con formatos binarios propietarios
Los modos de apertura para ficheros binarios son:
| Modo | Descripción |
|---|---|
"rb" |
Lectura binaria |
"wb" |
Escritura binaria (sobreescribe) |
"ab" |
Escritura binaria al final (append) |
"rb+" |
Lectura y escritura binaria |
En modo binario Python no aplica ninguna conversión de codificación. Lo que se lee o escribe son bytes puros (
bytes), no strings.
Diferencia entre modo texto y modo binario¶
En modo texto, Python convierte los bytes del fichero a caracteres usando el encoding. En modo binario, devuelve los bytes sin convertir.
Ejemplo: copiar un fichero binario¶
La operación más habitual con ficheros binarios es copiarlos sin alterar su contenido. Esto funciona con cualquier tipo de fichero (imagen, PDF, ZIP...) porque no se interpreta el contenido:
Para ficheros grandes, es mejor leer y escribir en bloques (chunks) en lugar de cargar todo en memoria:
El operador morsa
:=(Python 3.8+) asigna el valor devuelto porread()abloquey evalúa la condición al mismo tiempo. Cuandoread()devuelveb""(bytes vacíos) al llegar al final del fichero, el bucle termina.
Leer y escribir bytes directamente¶
Los objetos bytes y bytearray son los tipos de datos para trabajar con datos binarios en Python:
Contexto: librerías especializadas¶
Para los formatos binarios más comunes, Python dispone de librerías que abstraen la complejidad del formato y permiten trabajar a un nivel más alto:
| Formato | Librería |
|---|---|
| Imágenes (PNG, JPG, BMP...) | Pillow (PIL) |
| PDFs | PyPDF2, pdfplumber |
Excel (.xlsx) |
openpyxl, pandas |
| Audio | wave (WAV), mutagen |
| Archivos ZIP | zipfile (incluido en stdlib) |
En este módulo trabajaremos principalmente con ficheros de texto
Los ficheros binarios son una capacidad importante de Python, pero para el desarrollo de aplicaciones de gestión de datos los formatos más usados son texto, CSV y JSON. Las librerías especializadas (Pillow, openpyxl, etc.) se estudian en módulos más avanzados.