AI Agents · Aula

Lendo e escrevendo arquivos no contexto de agentes

open(), pathlib.Path e leitura de arquivos CSV/JSON/TXT a partir de ferramentas de agentes.

Aula 1 de 413 etapas

Lendo e escrevendo arquivos no contexto de agentes é uma aula grátis de AI Agents no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de AI Agents, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de AI Agents inclui 4 aulas no total.

Por que a E/S de arquivos é importante para agentes

Os agentes frequentemente precisam ler configurações, armazenar resultados intermediários e gravar relatórios de saída. O Python oferece duas formas principais de trabalhar com arquivos: a função integrada open() e o módulo moderno pathlib. É essencial conhecer ambas.

Toda operação de arquivo deve usar um gerenciador de contexto (instrução with) para garantir que o arquivo seja fechado mesmo quando ocorrer um erro.

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)

Lendo arquivos com open()

A função open() recebe um nome de arquivo e um modo. Para ler texto, use o modo 'r'. Você pode ler o arquivo inteiro de uma vez com .read(), linha por linha com .readline() ou todas as linhas em uma lista com .readlines().

Sempre especifique encoding='utf-8' para evitar problemas de codificação específicos da 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)

Gravando arquivos com open()

Use o modo 'w' para gravar (cria ou substitui), 'a' para acrescentar e 'x' para criar exclusivamente (falha se o arquivo já existir). O modo 'w' trunca o arquivo primeiro — tenha cuidado com os dados 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 — Operações modernas com arquivos

pathlib.Path oferece uma abordagem orientada a objetos para caminhos de arquivos. É mais legível que os.path e lida automaticamente com os separadores de caminho de diferentes plataformas. Para operações simples de leitura e gravação, read_text() e write_text() são a abordagem mais limpa.

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')

Leitura e gravação de arquivos JSON

Os agentes trocam frequentemente dados estruturados na forma de arquivos JSON. Use json.load() para analisar um arquivo JSON e json.dump() para gravá-lo. Sempre use indent=2 para obter uma saída legível por humanos e ensure_ascii=False para preservar 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')

Gerenciadores de contexto — A maneira correta

A instrução with (gerenciador de contexto) garante que o arquivo seja fechado quando o bloco terminar — mesmo que ocorra uma exceção durante a leitura. Sem ela, os arquivos podem permanecer abertos e vazar descritores de arquivo, causando falhas em sistemas com limites para identificadores de arquivo.

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)

Trabalhando com arquivos binários

Use o modo 'rb' para ler arquivos binários (imagens, PDFs, áudio) e 'wb' para gravá-los. Nunca tente decodificar conteúdo binário como texto — use read_bytes()/write_bytes() com pathlib ou modos binários com 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)

Lidando com problemas de codificação e quebra de linha

Sistemas diferentes usam caracteres diferentes para quebras de linha (\n no Linux/macOS, \r\n no Windows). Sempre especifique encoding='utf-8' e deixe o Python lidar com as quebras de linha usando newline=None (o padrão). Para arquivos com um BOM (marca de ordem dos bytes), use 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))

Processamento eficiente linha a linha

Para arquivos grandes (arquivos de registro, conjuntos de dados), evite carregar tudo na memória com .read(). Percorra diretamente o objeto de arquivo — o Python lê uma linha por vez, mantendo o uso de memória constante independentemente do tamanho do arquivo.

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')

Criando e gerenciando diretórios

Antes de gravar arquivos, certifique-se de que o diretório pai exista. Use Path.mkdir(parents=True, exist_ok=True) para criar diretórios aninhados sem gerar erros caso eles já existam. Essa é uma etapa comum de configuração no início de qualquer agente que produza arquivos de saída.

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')

Boas práticas para caminhos de arquivo em agentes

Os agentes devem usar caminhos absolutos ou caminhos relativos a um diretório base bem definido. Nunca dependa do diretório de trabalho atual (./), pois os agentes são frequentemente iniciados em locais diferentes. Use Path(__file__).parent para obter o diretório do 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)

Verificação rápida: gerenciadores de contexto

Teste sua compreensão das boas práticas de entrada e saída de arquivos.

Recapitulação de E/S de arquivos

Agora você tem uma base sólida para operações de arquivo no código de agentes:

  • Use open('file', 'r', encoding='utf-8') para ler, 'w' para gravar e 'a' para adicionar ao final
  • Sempre use a instrução with para garantir que os arquivos sejam fechados
  • pathlib.Path oferece um tratamento limpo e multiplataforma dos caminhos com read_text()/write_text()
  • Use json.load(f) / json.dump(data, f, indent=2) para dados estruturados
  • Percorra arquivos grandes linha a linha para minimizar o uso de memória
  • Use Path(__file__).parent como diretório base — nunca dependa de cwd
Grátis para começar

Aprenda AI Agents com um tutor de IA — grátis

Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.

Cursos
60
Aulas
239

Perguntas Frequentes

A aula “Lendo e escrevendo arquivos no contexto de agentes” é grátis?

Sim — o texto completo de “Lendo e escrevendo arquivos no contexto de agentes” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de AI Agents, atualize para CoddyKit PRO. O curso de AI Agents inclui 4 aulas no total.

O que vou aprender em “Lendo e escrevendo arquivos no contexto de agentes”?

open(), pathlib.Path e leitura de arquivos CSV/JSON/TXT a partir de ferramentas de agentes. Você pratica AI Agents com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar AI Agents?

Nenhuma experiência prévia é necessária. AI Agents no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.

Quanto tempo leva a aula “Lendo e escrevendo arquivos no contexto de agentes”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de AI Agents?

Sim. Cada aula de AI Agents inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Lendo e escrevendo arquivos no contexto de agentes
  2. Percurso de diretórios e descoberta de arquivos
  3. Tratamento de formatos de arquivo: CSV, JSON e TXT
  4. Operações seguras com arquivos e tratamento de erros
← Voltar para AI Agents