0Pricing
AI Agents · Lección

Lectura y escritura de archivos en el contexto de un agente

open(), pathlib.Path y lectura de archivos CSV/JSON/TXT desde las herramientas del agente.

Lectura y escritura de archivos en el contexto de un agente es una lección gratuita de AI Agents en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de AI Agents, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de AI Agents incluye 4 lecciones en total.

Por qué es importante la E/S de archivos para los agentes

Los agentes suelen necesitar leer la configuración, almacenar resultados intermedios y escribir informes de salida. Python proporciona dos formas principales de trabajar con archivos: la función integrada open() y el moderno módulo pathlib. Es fundamental conocer ambas.

Toda operación de archivos debe utilizar un gestor de contexto (instrucción with) para garantizar que el archivo se cierre incluso si se produce un error.

with open('config.txt', 'w', encoding='utf-8') as f:
    f.write('model=gpt-4o-mini\nmax_steps=20\n')

with open('config.txt', 'r', encoding='utf-8') as f:
    content = f.read()

from pathlib import Path
content = Path('config.txt').read_text(encoding='utf-8')

print(content)

Lectura de archivos con open()

La función open() recibe un nombre de archivo y un modo. Para leer texto, utilice el modo 'r'. Puede leer todo el archivo de una vez con .read(), línea por línea con .readline() o todas las líneas en una lista con .readlines().

Especifique siempre encoding='utf-8' para evitar problemas de codificación específicos de la plataforma.

with open('report.txt', 'w', encoding='utf-8') as f:
    f.write('Quarterly agent report body text.')
with open('large_log.txt', 'w', encoding='utf-8') as f:
    f.write('INFO: started\nERROR: timeout\nINFO: done\n')
with open('tasks.txt', 'w', encoding='utf-8') as f:
    f.write('task one\ntask two\n')

with open('report.txt', 'r', encoding='utf-8') as f:
    full_text = f.read()
    print(f'Read {len(full_text)} characters')

with open('large_log.txt', 'r', encoding='utf-8') as f:
    for line in f:
        line = line.rstrip('\n')
        if 'ERROR' in line:
            print('Found error:', line)

with open('tasks.txt', 'r', encoding='utf-8') as f:
    tasks = f.readlines()
    tasks = [t.strip() for t in tasks]
print('Tasks:', tasks)

Escritura de archivos con open()

Utilice el modo 'w' para escribir (crea o sobrescribe), 'a' para añadir y 'x' para crear exclusivamente (falla si el archivo ya existe). El modo 'w' trunca primero el archivo; tenga cuidado con los datos existentes.

# Write a new file (or overwrite)
results = ['Task 1 complete', 'Task 2 complete', 'Task 3 failed']

with open('results.txt', 'w', encoding='utf-8') as f:
    for result in results:
        f.write(result + '\n')

# Append to existing file (add without overwriting)
with open('agent_log.txt', 'a', encoding='utf-8') as f:
    f.write('2026-05-29 14:30: Agent completed batch\n')

# Create exclusively — error if file already exists
try:
    with open('unique_report.txt', 'x', encoding='utf-8') as f:
        f.write('This file is new')
except FileExistsError:
    print('File already exists, skipping')

# --- demo ---
print('results.txt contents:')
with open('results.txt', encoding='utf-8') as f:
    print(f.read())

# Try the exclusive create again now that the file exists
try:
    with open('unique_report.txt', 'x', encoding='utf-8') as f:
        f.write('This file is new')
except FileExistsError:
    print('File already exists, skipping')

pathlib.Path — Operaciones modernas con archivos

pathlib.Path proporciona un enfoque orientado a objetos para las rutas de archivos. Es más legible que os.path y gestiona automáticamente los separadores de rutas entre distintas plataformas. Para operaciones sencillas de lectura y escritura, read_text() y write_text() son la opción más limpia.

from pathlib import Path

base = Path('agent_workspace')
base.mkdir(exist_ok=True)
config_file = base / 'config.json'
config_file.write_text('{"model": "gpt-4o-mini"}', encoding='utf-8')

if config_file.exists():
    content = config_file.read_text(encoding='utf-8')
    print('Config:', content)

output = base / 'output' / 'report.txt'
output.parent.mkdir(parents=True, exist_ok=True)
output.write_text('Agent report\nLine 2', encoding='utf-8')

Path('image.png').write_bytes(b'\x89PNG\r\n\x1a\n' + bytes(range(100)))
binary_data = Path('image.png').read_bytes()
print(f'File size: {len(binary_data)} bytes')

Lectura y escritura de archivos JSON

Los agentes intercambian con frecuencia datos estructurados mediante archivos JSON. Utilice json.load() para analizar un archivo JSON y json.dump() para escribirlo. Utilice siempre indent=2 para obtener una salida legible y ensure_ascii=False para conservar los caracteres Unicode.

import json
from pathlib import Path

config_path = Path('agent_config.json')
config_path.write_text(json.dumps({'max_retries': 5, 'model': 'gpt-4o-mini'}), encoding='utf-8')

with open(config_path, 'r', encoding='utf-8') as f:
    config = json.load(f)

print('Max retries:', config.get('max_retries', 3))
print('Model:', config.get('model', 'gpt-4o-mini'))

results = {
    'run_id': 'run-001',
    'status': 'completed',
    'items_processed': 142,
    'errors': []
}

with open('results.json', 'w', encoding='utf-8') as f:
    json.dump(results, f, indent=2, ensure_ascii=False)

print('Results written to results.json')

Administradores de contexto — La forma correcta

La instrucción with (administrador de contexto) garantiza que el archivo se cierre cuando finaliza el bloque, incluso si se produce una excepción durante la lectura. Sin ella, los archivos pueden permanecer abiertos y provocar fugas de descriptores, lo que causa fallos en sistemas con límites de identificadores de archivo.

with open('data.txt', 'w', encoding='utf-8') as f:
    f.write('sample content')

f = open('data.txt', 'r')
try:
    content = f.read()
finally:
    f.close()

with open('data.txt', 'r', encoding='utf-8') as f:
    content = f.read()

with open('input.txt', 'w', encoding='utf-8') as f:
    f.write('hello\nworld\n')

with open('input.txt', 'r') as infile, \
     open('output.txt', 'w') as outfile:
    for line in infile:
        processed = line.upper()
        outfile.write(processed)

print('Done:', content)

Trabajo con archivos binarios

Utilice el modo 'rb' para leer archivos binarios (imágenes, archivos PDF y audio) y 'wb' para escribirlos. Nunca intente decodificar contenido binario como texto; utilice read_bytes()/write_bytes() con pathlib o modos binarios con open().

from pathlib import Path
import base64

image_path = Path('screenshot.png')
image_path.write_bytes(b'\x89PNG\r\n\x1a\n' + bytes(range(50)))

image_bytes = image_path.read_bytes()
print(f'Image size: {len(image_bytes)} bytes')

image_b64 = base64.b64encode(image_bytes).decode('utf-8')
print(f'Base64 length: {len(image_b64)}')

response_bytes = b'...binary content from API...'
output_path = Path('output') / 'generated_image.png'
output_path.parent.mkdir(exist_ok=True)
output_path.write_bytes(response_bytes)
print('Wrote', output_path)

Gestión de problemas de codificación y saltos de línea

Los distintos sistemas utilizan diferentes caracteres de salto de línea (\n en Linux/macOS y \r\n en Windows). Especifique siempre encoding='utf-8' y deje que Python gestione los saltos de línea mediante newline=None (el valor predeterminado). Para archivos con una BOM (marca de orden de bytes), utilice encoding='utf-8-sig'.

with open('data.txt', 'w', encoding='utf-8') as f:
    f.write('hello world')
with open('windows_export.csv', 'wb') as f:
    f.write('name,email\n'.encode('utf-8'))
with open('unknown_encoding.txt', 'wb') as f:
    f.write('cafe resume'.encode('latin-1'))

with open('data.txt', 'r', encoding='utf-8') as f:
    text = f.read()

with open('windows_export.csv', 'r', encoding='utf-8-sig') as f:
    content = f.read()

try:
    with open('unknown_encoding.txt', 'r', encoding='utf-8') as f:
        text = f.read()
except UnicodeDecodeError:
    with open('unknown_encoding.txt', 'r',
               encoding='utf-8', errors='replace') as f:
        text = f.read()
    print('Warning: file had encoding errors (replaced with ?)')

print('All reads completed. csv content:', repr(content))

Procesamiento eficiente línea por línea

Para archivos grandes (archivos de registro y conjuntos de datos), evite cargar todo en memoria mediante .read(). Itere directamente sobre el objeto de archivo: Python lee una línea a la vez, por lo que el uso de memoria se mantiene constante independientemente del tamaño del archivo.

from pathlib import Path

def process_large_log(log_path):
    error_count = 0
    processed = 0

    with open(log_path, 'r', encoding='utf-8') as f:
        for line in f:  # reads one line at a time
            line = line.strip()
            if not line:
                continue

            processed += 1
            if '[ERROR]' in line:
                error_count += 1
                # Process error immediately without storing all lines
                handle_error(line)

    print(f'Processed {processed} lines, {error_count} errors')

def handle_error(line):
    print(f'Error found: {line[:80]}')

# --- demo ---
with open('demo_agent.log', 'w', encoding='utf-8') as f:
    f.write('[INFO] agent started\n')
    f.write('[ERROR] timeout calling tool search_web\n')
    f.write('[INFO] retrying\n')
    f.write('[ERROR] tool search_web failed again\n')

process_large_log('demo_agent.log')

Creación y gestión de directorios

Antes de escribir archivos, asegúrese de que exista el directorio principal. Utilice Path.mkdir(parents=True, exist_ok=True) para crear directorios anidados sin errores si ya existen. Este es un paso de configuración habitual al inicio de cualquier agente que genere archivos de salida.

from pathlib import Path
import datetime

# Create output directory structure
today = datetime.date.today().isoformat()  # '2026-05-29'
output_dir = Path('agent_output') / today / 'reports'
output_dir.mkdir(parents=True, exist_ok=True)

print(f'Output directory: {output_dir}')

# Now write files safely
for i in range(3):
    report_path = output_dir / f'report_{i:02d}.json'
    report_path.write_text(
        '{"status": "ok"}',
        encoding='utf-8'
    )

# List all created files
for f in output_dir.iterdir():
    print(f'  {f.name}: {f.stat().st_size} bytes')

Prácticas recomendadas para las rutas de archivos de los agentes

Los agentes deben utilizar rutas absolutas o rutas relativas a un directorio base bien definido. Nunca dependa del directorio de trabajo actual (./), porque los agentes suelen iniciarse desde ubicaciones diferentes. Utilice Path(__file__).parent para obtener el directorio del script como base.

from pathlib import Path

# Get absolute path relative to THIS script's location
SCRIPT_DIR = Path(__file__).parent
DATA_DIR = SCRIPT_DIR / 'data'
OUTPUT_DIR = SCRIPT_DIR / 'output'

# Always resolve to absolute path before use
config = DATA_DIR / 'config.json'
print('Config path:', config.resolve())

# Check if file exists before reading
if config.exists():
    import json
    with open(config, 'r', encoding='utf-8') as f:
        settings = json.load(f)
else:
    print(f'Config not found at {config.resolve()}')
    settings = {}

# Safe output path
result_path = (OUTPUT_DIR / 'result.json').resolve()
print('Will write to:', result_path)

Comprobación rápida: administradores de contexto

Compruebe su comprensión de las prácticas recomendadas para las operaciones de E/S de archivos.

Resumen de las operaciones con archivos

Ahora cuenta con una base sólida para las operaciones con archivos en el código de los agentes:

  • Utilice open('file', 'r', encoding='utf-8') para leer, 'w' para escribir y 'a' para añadir
  • Utilice siempre la instrucción with para asegurarse de que los archivos se cierren
  • pathlib.Path proporciona una gestión de rutas limpia y multiplataforma con read_text()/write_text()
  • Utilice json.load(f) / json.dump(data, f, indent=2) para datos estructurados
  • Itere sobre los archivos línea por línea cuando sean grandes para reducir al mínimo el uso de memoria
  • Utilice Path(__file__).parent como directorio base; nunca dependa de cwd

Preguntas frecuentes

¿La lección «Lectura y escritura de archivos en el contexto de un agente» es gratis?

Sí — el texto completo de «Lectura y escritura de archivos en el contexto de un agente» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de AI Agents, actualiza a CoddyKit PRO. El curso de AI Agents incluye 4 lecciones en total.

¿Qué aprenderé en «Lectura y escritura de archivos en el contexto de un agente»?

open(), pathlib.Path y lectura de archivos CSV/JSON/TXT desde las herramientas del agente. Practicas AI Agents con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar AI Agents?

No se requiere experiencia previa. AI Agents en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.

¿Cuánto tiempo toma la lección «Lectura y escritura de archivos en el contexto de un agente»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de AI Agents?

Sí. Cada lección de AI Agents incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Lectura y escritura de archivos en el contexto de un agente
  2. Recorrido de directorios y descubrimiento de archivos
  3. Gestión de formatos de archivo: CSV, JSON y TXT
  4. Operaciones seguras con archivos y gestión de errores
← Volver a AI Agents