Los archivos son esenciales para almacenar y gestionar datos en programas. En Python, podemos trabajar con diversos tipos de archivos para guardar configuraciones, procesar datos o interactuar con APIs. ¡Aprendamos cómo!
- Extensión común:
.txt,.log,.csv - Características:
- Almacenan texto legible por humanos.
- Ideales para configuraciones, registros o datos simples.
# Ejemplo: Crear un archivo de texto
with open("notas.txt", "w") as archivo:
archivo.write("Hoy aprendí Python\n")- Extensión común:
.jpg,.png,.exe - Características:
- Guardan datos en formato binario (no legible directamente).
- Usados para imágenes, ejecutables o datos serializados.
# Ejemplo: Leer una imagen
with open("foto.jpg", "rb") as archivo:
datos = archivo.read()- Extensión:
.csv - Características:
- Almacenan datos tabulares (filas y columnas).
- Cada valor se separa por comas u otros delimitadores.
- Extensión:
.json - Características:
- Guardan datos estructurados como diccionarios o listas.
- Ampliamente usados en APIs y configuraciones.
- Función
open(): Abre un archivo. - Método
close(): Cierra el archivo manualmente.
archivo = open("datos.txt", "r")
contenido = archivo.read()
archivo.close() # ¡No olvides cerrar!| Método | Descripción |
|---|---|
read() |
Lee todo el contenido como un string |
readline() |
Lee una línea a la vez |
readlines() |
Devuelve una lista de líneas |
Ejemplo:
with open("datos.txt", "r") as archivo:
lineas = archivo.readlines()
for linea in lineas:
print(linea.strip()) # .strip() elimina espacios/saltos| Modo | Descripción |
|---|---|
w |
Crea/sobrescribe un archivo |
a |
Añade contenido al final |
r+ |
Lectura y escritura simultánea |
Ejemplo:
with open("registro.log", "a") as archivo:
archivo.write("Nueva entrada: Usuario registrado\n")Evita que el programa se detenga por errores:
try:
with open("datos.csv", "r") as archivo:
print(archivo.read())
except FileNotFoundError:
print("⚠️ Error: El archivo no existe")
except Exception as e:
print(f"❌ Error inesperado: {e}")Usa os.path.exists() para verificar archivos:
import os
if os.path.exists("config.json"):
print("✅ Archivo encontrado")
else:
print("❌ Archivo no existe")import csv
with open("empleados.csv", "r") as archivo:
lector = csv.reader(archivo)
for fila in lector:
print(f"Nombre: {fila[0]}, Edad: {fila[1]}")with open("productos.csv", "w", newline="") as archivo:
escritor = csv.writer(archivo)
escritor.writerow(["Producto", "Precio"])
escritor.writerow(["Laptop", 1200])Ejemplo Práctico: Calcular edad promedio desde un CSV:
total_edad = 0
contador = 0
with open("empleados.csv", "r") as archivo:
lector = csv.reader(archivo)
next(lector) # Saltar cabecera
for fila in lector:
total_edad += int(fila[1])
contador += 1
print(f"Edad promedio: {total_edad / contador}")JSON (JavaScript Object Notation) es un formato ligero para intercambiar datos. Es ideal para:
- Almacenar configuraciones
- Comunicarse con APIs web
- Guardar datos estructurados
Características clave:
- Usa pares
clave: valor(como diccionarios de Python) - Soporta listas, números, strings, booleanos y
null - Es legible por humanos y máquinas
| Término | Definición | Método JSON |
|---|---|---|
| Serialización | Convertir objetos Python → texto JSON | json.dump() |
| Deserialización | Convertir texto JSON → objetos Python | json.load() |
import json
datos_usuario = {
"nombre": "Ana",
"edad": 28,
"hobbies": ["programar", "leer"],
"premium": True
}
with open("usuario.json", "w") as archivo:
json.dump(datos_usuario, archivo, indent=4) # indent para formato bonitowith open("usuario.json", "r") as archivo:
datos = json.load(archivo)
print(f"{datos['nombre']} tiene {datos['edad']} años")
# Output: "Ana tiene 28 años"usuarios = [
{"id": 1, "nombre": "Carlos", "puntos": 150},
{"id": 2, "nombre": "María", "puntos": 300}
]
with open("usuarios.json", "w") as archivo:
json.dump(usuarios, archivo)- Cierre automático: El archivo se cierra al salir del bloque, incluso si hay errores
- Código más limpio: Reduce líneas de código
- Previene corrupción: Evita que archivos queden abiertos por accidente
Ejemplo Comparativo:
# Sin with (puede olvidarse close())
archivo = open("datos.txt", "r")
contenido = archivo.read()
archivo.close()
# Con with (recomendado)
with open("datos.txt", "r") as archivo:
contenido = archivo.read()
# ¡Archivo cerrado automáticamente!mi_proyecto/
├── data/ # Datos (CSV, JSON, etc)
│ ├── input/ # Datos crudos
│ └── output/ # Resultados procesados
├── src/ # Código fuente
│ ├── utils/ # Funciones auxiliares
│ └── main.py # Script principal
├── docs/ # Documentación
├── config/ # Archivos de configuración
└── README.md # Guía del proyecto
- Separa datos de código: Nunca mezcles archivos
.pycon.csven la misma carpeta - Usa rutas relativas:
import os
CARPETA_DATA = os.path.join("data", "input") # ✔️ Mejor que "C:/proyecto/data"- Versiona tus datos: Usa nombres como
ventas_2023_v1.csv - Documenta la estructura: Explica en el README cómo organizar los archivos
import json
import os
# Crear estructura de carpetas
os.makedirs("data/users", exist_ok=True)
def guardar_usuario(usuario):
ruta = os.path.join("data/users", f"{usuario['id']}.json")
with open(ruta, "w") as archivo:
json.dump(usuario, archivo)
def cargar_usuario(user_id):
ruta = os.path.join("data/users", f"{user_id}.json")
try:
with open(ruta, "r") as archivo:
return json.load(archivo)
except FileNotFoundError:
return None
# Uso
nuevo_usuario = {"id": 101, "nombre": "Luisa", "email": "luisa@ejemplo.com"}
guardar_usuario(nuevo_usuario)
usuario = cargar_usuario(101)
print(usuario["nombre"]) # Output: "Luisa"