T1. Captura, limpieza y normalización de datos🔗
1. Introducción🔗
La idea clave: del dato al archivo y del archivo al dato
- Abrir el archivo (de forma segura).
- Leer y/o escribir.
- Procesar: limpiar, filtrar, transformar.
- Guardar resultados si corresponde.
- Cerrar correctamente el fichero (aunque haya errores).
- [Opcional] Seguridad del fichero (evitar corrupciones).
Para lograr de forma "pythonica" lo anterior deberemos estudiar algunos conceptos previos: 1. Excepciones 2. Archivos con formato: - csv - json - xml 3. Sistemas de archivos 3. Bases de datos: - SQlite - MariaDB
2. Excepciones🔗
- ¿Qué es?
- Modelo de excepciones
try-except - Excepciones genéricas y con
as e elseyfinally- Lanzar o relanzar excepciones
raise - Jerarquía de excepciones
⚠️ Evita capturar
BaseExceptionya que incluyeKeyboardInterruptySystemExit. - Excepciones personalizadas
- Ejercicios
- Buenas prácticas
Avanzado 10. Logging 11. Test
3. Archivos con formato🔗
Archivos sin formato🔗
- 'LBYL' vs 'EAFP': El enfoque "pythonico"
- Posibles problemas -> excepciones
- Codificaciones: estándar
utf-8 - Ciclo de vida
- Modos de operación
- Lectura y escritura con
with open()
Ciclo de vida🔗
Cada fichero pasa por un ciclo claro: 1. Se solicita apertura. 2. El sistema devuelve un descriptor (file descriptor). 3. Se realizan operaciones (lectura/escritura). 4. Se libera el recurso mediante cierre.
Si el recurso no se libera correctamente, el sistema puede quedarse sin descriptores disponibles.
Modos🔗
De apertura: r/w/a/x - "default": 'r' Lectura (error si no existe) - 'w' Escritura (sobrescribe) - 'a' Añadir al final - 'x' Crear archivo nuevo
De trabajo: - 'b' Modo binario - 't' Modo texto (por defecto)
with open()🔗
with open("archivo_de_entrada.txt", "r", encoding="utf-8") as f:
contenido = f.read()
Otras opciones: - newline: necesario desactivar en csv - buffering - errors
3️⃣ Estrategias de Lectura
🟩 .read() — Cargar todo en memoria
🟦 .readlines() — Lista de líneas
🟨 Iteración directa — Método recomendado
4️⃣ El Puntero del Archivo
🟩 seek() — mover el puntero
🟦 tell() — saber dónde estamos
5️⃣ Escritura y Buffers
🟩 Modos de escritura: w vs a vs x
🟦 write() devuelve cuántos caracteres ha escrito
🟨 write() NO añade salto de línea automáticamente
🟧 writelines(): escribe muchas líneas, pero con trampa
🟥 Buffers: por qué a veces “no se ve” lo escrito
🟪 flush() para forzar escritura inmediata
🟫 Escritura segura: evitar corrupción con archivos temporales
6️⃣ Modos avanzados
🟦 Atención al puntero
Formato csv🔗
El formato csv🔗
El "standard" y las variantes.