Módulo 3: Trabajo con archivos y manejo de errores
Tema 10: Lectura/Escritura de Archivos de Texto y CSV
Objetivo del tema:
Aprender a trabajar con archivos externos en Python, incluyendo:
- Archivos de texto plano (
.txt) - Archivos CSV (valores separados por comas)
1. Lectura y Escritura de Archivos de Texto
Abrir un archivo con open()
Siempre es importante cerrar el archivo después de usarlo, o usar with.
Mejor forma: with
Modos de apertura más comunes:
'r': lectura'w': escritura (sobrescribe)'a': añadir contenido al final'x': crea nuevo archivo (falla si ya existe)
Escribir en un archivo
Leer línea por línea
2. Lectura y Escritura de Archivos CSV
Python ofrece el módulo estándar csv para trabajar con archivos .csv.
Leer archivo CSV
Leer con cabecera (como diccionario)
Escribir archivo CSV
Escribir con diccionarios
3. Buenas prácticas
- Usa siempre
withpara abrir archivos. - Controla excepciones con
try/except. - Usa
newline=''para evitar líneas en blanco en Windows. - Codificación recomendada:
encoding='utf-8'.
Actividades sugeridas
- Crear un archivo de texto con una lista de tareas y luego leerlo desde Python.
- (CASA) Leer un archivo
.csvcon datos de productos y calcular el precio total de cada uno. - (CASA) Escribir un nuevo archivo
.csvcon los resultados anteriores. - (CASA) Escribir un programa que pida por consola los datos de varias personas (nombre, edad) y los guarde en un archivo CSV.
- (CASA) Leer un archivo de texto línea por línea y contar cuántas líneas contienen una palabra clave dada.
Tema 11: Manejo de errores con try, except, finally
Objetivo del tema:
Aprender a detectar, capturar y gestionar errores en tiempo de ejecución para evitar que el programa se bloquee y garantizar un comportamiento seguro y controlado.
1. ¿Qué es una excepción?
Una excepción es un error que ocurre durante la ejecución del programa. Si no se maneja, Python interrumpe el programa y muestra un mensaje de error.
Ejemplo:
Si el usuario introduce 0 o algo no numérico, el programa fallará.
2. Estructura básica: try y except
3. Múltiples excepciones
4. Bloque else
Se ejecuta solo si no hay errores.
5. Bloque finally
Se ejecuta siempre, haya o no error. Ideal para cerrar archivos, liberar recursos, etc.
Las excepciones más comunes de Python se recogen, con ejemplos, en la tabla del Tema 12.
6. Capturar más de una excepción en una sola línea
Se pueden capturar varias excepciones de ser necesario:
7. Capturar cualquier excepción
No es recomendable, pero útil en algunos casos:
8. Lanzar tus propias excepciones con raise
Hasta ahora hemos capturado errores; también puedes provocarlos tú mismo con raise cuando detectes una situación inválida. Así avisas de un problema en vez de dejar que el programa siga con datos incorrectos.
Puedes lanzar cualquier excepción estándar (ValueError, TypeError, etc.). Para casos propios de tu programa, crea tu propia excepción heredando de Exception:
Actividades sugeridas
- Crear un programa que divida dos números y maneje:
- División por cero
- Entrada no numérica
- Leer un archivo y mostrar error si no existe.
- Crear una función que abra un archivo, lea contenido y lo devuelva, asegurando que siempre se cierre el archivo.
- Simular un pequeño sistema de login donde se capturen errores si falta el archivo de usuarios o si los datos no son válidos.
- (CASA) Ampliar el mini-proyecto de la calculadora (del Módulo 1) con manejo de errores.
Tema 12: Uso de with, excepciones comunes
Objetivo del tema:
- Comprender el uso de la sentencia
withpara la gestión automática de recursos. - Conocer y reconocer las excepciones más comunes en Python para prevenir errores y manejarlos de forma eficaz.
1. Uso del bloque with
El bloque with se usa para gestionar contextos en los que se necesita abrir y cerrar recursos, como archivos, conexiones o recursos externos, sin necesidad de cerrar manualmente.
Ventajas:
- Cierre automático del recurso.
- Código más limpio y seguro.
- Evita olvidarse de
close()o de limpiar recursos.
Sintaxis general
Ejemplo con archivos
2. ¿Cómo funciona internamente?
El bloque with usa un context manager, que gestiona la apertura y el cierre de recursos.
Equivale a:
3. Excepciones comunes en Python
Conocer estas excepciones es útil para anticipar errores en el código y aplicar try/except de forma efectiva.
| Excepción | Descripción | Ejemplo desencadenante |
|---|---|---|
ZeroDivisionError |
División entre cero | 10 / 0 |
ValueError |
Conversión inválida entre tipos | int("abc") |
TypeError |
Operación con tipos incompatibles | "hola" + 3 |
IndexError |
Índice fuera de rango en una lista o tupla | lista[10] |
KeyError |
Clave inexistente en un diccionario | diccionario["clave_invalida"] |
FileNotFoundError |
Archivo inexistente | open("inexistente.txt") |
AttributeError |
Acceso a un atributo que no existe | "hola".inexistente |
NameError |
Uso de una variable no definida | print(variable_no_definida) |
Actividades prácticas
- Crear un programa que abra un archivo usando
withy muestre su contenido. - Modificar un archivo existente sin sobrescribirlo, usando
withy el modo'a'. - Crear un pequeño script que capture varias excepciones comunes como
IndexError,TypeError, yValueError. - Crear un diccionario de usuarios y probar accesos seguros con manejo de
KeyError. - Crear una función que reciba una ruta de archivo y devuelva su contenido, gestionando errores con
try/exceptywith.
Tema 13: Estructuración de proyectos
Objetivo:
Aprender cómo dividir el código Python en varios archivos (módulos), importar funciones y clases desde otros scripts, y entender el uso de la instrucción especial if __name__ == "__main__": para controlar qué partes del código se ejecutan al importar o ejecutar un script.
1. Introducción a los módulos en Python
En Python, cada archivo .py es un módulo.
Podemos importar el contenido de un archivo en otro para reutilizar código.
Esto permite:
- Organizar mejor los programas grandes.
- Reutilizar funciones y clases en distintos proyectos.
- Mantener el código más limpio y modular.
Ejemplo básico
Archivo: saludos.py
Archivo: principal.py
2. Formas de importar
Python permite varias formas de importación:
import saludos # Importa todo el módulo
Consejo: usar alias o importaciones específicas mejora la legibilidad y evita conflictos de nombres.
3. La variable especial __name__
Python asigna automáticamente una variable especial llamada __name__ a todos los archivos .py.
- Si el archivo se ejecuta directamente,
__name__toma el valor"__main__". - Si el archivo se importa en otro,
__name__toma el nombre del módulo.
Podemos usar esto para decidir qué partes del código se ejecutan.
Ejemplo práctico
Archivo: saludos.py
Al ejecutar python saludos.py mostrará:
Este código siempre se ejecuta
Este código SOLO se ejecuta si este archivo se ejecuta directamenteAl importar en otro archivo:
Salida:
Este código siempre se ejecutaLa parte dentro de if __name__ == "__main__": no se ejecuta.
4. Uso típico: definir una función main()
Para programas más grandes, se suele definir una función principal y controlarla así:
Esto mejora la legibilidad y permite usar el archivo tanto como programa ejecutable como módulo reutilizable.
5. Organización de proyectos
Estructura recomendada para proyectos pequeños:
mi_proyecto/
│
├── main.py
├── utilidades.py
├── calculos.py
└── datos/
└── archivo.csvmain.py→ punto de entrada (usaif __name__ == "__main__")utilidades.py→ funciones auxiliarescalculos.py→ lógica del programadatos/→ ficheros y recursos
Resumen del tema
| Concepto | Descripción |
|---|---|
| Módulo | Archivo .py que puede importarse en otros scripts. |
| Importación | Permite usar funciones y clases de otro archivo. |
__name__ |
Variable interna que indica si el archivo fue ejecutado directamente o importado. |
if __name__ == "__main__" |
Permite ejecutar código solo cuando el archivo se ejecuta directamente. |
| Estructura modular | Mejora la organización y reutilización del código. |
Actividades y ejercicios prácticos
Ejercicio 1: Modularización básica
- Crea un archivo llamado
operaciones.pycon las funciones:
def sumar(a, b): return a + b
- Crea un segundo archivo
main.pyque importe esas funciones y las use para realizar operaciones con dos números introducidos por el usuario.
Ejercicio 2: Uso de if __name__ == "__main__"
- En el archivo
operaciones.py, añade:
if __name__ == "__main__":
- Observa qué ocurre al ejecutar directamente
operaciones.pyy qué ocurre al importarlo desdemain.py.
Ejercicio 3: Mini proyecto
Objetivo: Crear una pequeña aplicación modular que gestione una lista de tareas.
Estructura:
gestor_tareas/
│
├── main.py
├── tareas.py
└── utilidades.pytareas.py: funciones para añadir, eliminar y mostrar tareas.utilidades.py: funciones auxiliares como guardar y leer tareas desde un archivo.main.py: contieneif __name__ == "__main__"y ejecuta el menú principal del programa.
Entrega sugerida para el ejercicio 3:
- Código fuente en varios archivos
.pyorganizados. - Captura o salida de la ejecución del programa.
- Breve explicación (máx. 5 líneas) del papel de
if __name__ == "__main__"en el proyecto.