Lendo e escrevendo arquivos no contexto de agentes
open(), pathlib.Path e leitura de arquivos CSV/JSON/TXT a partir de ferramentas de agentes.
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__).parentcomo diretório base — nunca dependa de cwd
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
- Lendo e escrevendo arquivos no contexto de agentes
- Percurso de diretórios e descoberta de arquivos
- Tratamento de formatos de arquivo: CSV, JSON e TXT
- Operações seguras com arquivos e tratamento de erros