Pensamiento Computacional (090) · Unidad 5 — Entrada, salida y errores
Archivos
Un archivo es la forma de que los datos sobrevivan al programa. Se abre, se usa y se cierra — y lo que se lee siempre es texto.
La explicación
Por qué hacen falta
Las variables viven en memoria y desaparecen cuando el programa termina. Si querés que algo quede, tiene que ir al disco. Eso es un archivo.
Abrir, usar, cerrar
contenido = f.read()
f.close()
El segundo argumento es el modo:
"w" escribir borra todo lo que había
"a" agregar escribe al final, conserva lo anterior
La forma recomendada: with
contenido = f.read()
# acá afuera el archivo ya está cerrado
Cierra solo, incluso si adentro se produce un error. Con open y
close sueltos, un error en el medio deja el archivo abierto. Usá siempre
with.
Tres formas de leer
f.readlines() → una lista con todas las líneas
for linea in f: → de a una, sin cargar todo en memoria
La tercera es la que conviene con archivos grandes: no necesita que todo entre en memoria.
Dos cosas que siempre sorprenden al leer
25, lo que leés es
"25\n". Por eso se usa .strip(), que saca espacios y saltos de los bordes.2. Todo lo que se lee es texto. Igual que con
input(): si es un número, hay
que convertirlo con int() o float().
for linea in f:
edad = int(linea.strip()) # las dos cosas
Escribir
f.write("primera línea\n")
f.write("segunda línea\n")
write no agrega el salto de línea: si no lo ponés vos, queda todo pegado en
una sola línea. Y sólo escribe strings, así que los números van con str().
Un archivo notas.txt tiene una nota por línea. Escribir una función que devuelva el promedio.
total = 0
cantidad = 0
with open(nombre_archivo, "r") as f:
for linea in f:
total = total + int(linea.strip())
cantidad = cantidad + 1
return total / cantidad
Las tres cosas que hay que notar:
- Los acumuladores van antes del
with. Si los pusieras adentro delforse reiniciarían en cada línea — el mismo error del tema 3.3. .strip()antes deint(). Sin eso,int("7\n")tiraValueError.withcierra solo. No hace faltaf.close().
cantidad queda en 0 y
total / cantidad tira ZeroDivisionError. La forma prolija:
return 0 # o None, según qué tenga sentido
return total / cantidad
Control: el promedio tiene que quedar entre la nota más baja y la más alta del archivo. Si te da fuera de ese rango, revisá el acumulador.
Dónde se cae la mayoría
- Abrir en modo "w" cuando se quería agregar: borra todo el archivo al instante.
- Olvidar el .strip() y quedarse con el salto de línea pegado al dato.
- Olvidar el \n al escribir, y que todo salga en una sola línea.
Hasta acá la explicación. La práctica es la otra mitad: 7 ejercicios de este tema, en cuatro niveles, que no te dicen sólo si está bien al final sino que te corrigen en cada paso y te explican por qué. Además trae una animación que muestra la idea en movimiento.
Practicar Archivos →