Spec Sistemas Com Python • Trilha Progressiva em 4 Níveis


🧭 Navegação Pedagógica


🎯 Nível 1: Fundamentos

Problema 12.1 — Gerenciadores de Contexto Nativos (with open()) e Encodings UTF-8

Contexto: Gerenciadores de Contexto Nativos (with open()) e Encodings UTF-8 no contexto de Manipulação de Arquivos (Texto, CSV, JSON) e Context Managers.

Requisitos de Execução:

  1. Gravar e ler arquivos texto com with open(..., 'w', encoding='utf-8') garantindo fechamento.

Resultado Esperado

Arquivo gravado e lido deterministicamente.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_12_1_SeuNome
  2. Envie na tarefa: Atividade Cap 12 - Manipulação de Arquivos (Texto, CSV, JSON) e Context Managers
🔑 Gabarito de Código & Solução Comentada
with open("log.txt", "w", encoding="utf-8") as f:
    f.write("AUDITORIA PYTHON: Sistema Operacional\n")

with open("log.txt", "r", encoding="utf-8") as f:
    conteudo = f.read()
    print("Lido do arquivo:", conteudo.strip())

🔍 Nível 2: Prática

Problema 12.2 — Serialização JSON com json.dump() e Manipulação com pathlib.Path

Contexto: Serialização JSON com json.dump() e Manipulação com pathlib.Path no contexto de Manipulação de Arquivos (Texto, CSV, JSON) e Context Managers.

Requisitos de Execução:

  1. Criar árvore de diretórios e gravar payload JSON estruturado utilizando pathlib.Path.

Resultado Esperado

Arquivo JSON estruturado manipulado via métodos da biblioteca padrão pathlib.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_12_2_SeuNome
  2. Envie na tarefa: Atividade Cap 12 - Manipulação de Arquivos (Texto, CSV, JSON) e Context Managers
🔑 Gabarito de Código & Solução Comentada
import json
from pathlib import Path

caminho = Path("configuracoes/app.json")
caminho.parent.mkdir(parents=True, exist_ok=True)

dados = {"servico": "PythonSystems", "porta": 8000, "debug": False}
caminho.write_text(json.dumps(dados, indent=2), encoding="utf-8")

print(f"Arquivo gravado em: {caminho.resolve()} (Tamanho: {caminho.stat().st_size} bytes)")

⚡ Nível 3: Integração

Problema 12.3 — Context Managers Customizados com contextlib.contextmanager

Contexto: Context Managers Customizados com contextlib.contextmanager no contexto de Manipulação de Arquivos (Texto, CSV, JSON) e Context Managers.

Requisitos de Execução:

  1. Criar gerenciador de contexto com @contextmanager para medir tempo de execução de blocos de código.

Resultado Esperado

Tempo de execução medido e logado automaticamente na saída do bloco with.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_12_3_SeuNome
  2. Envie na tarefa: Atividade Cap 12 - Manipulação de Arquivos (Texto, CSV, JSON) e Context Managers
🔑 Gabarito de Código & Solução Comentada
import time
from contextlib import contextmanager
from typing import Generator

@contextmanager
def cronometro(nome: str) -> Generator[None, None, None]:
    t0 = time.perf_counter()
    try:
        yield
    finally:
        t1 = time.perf_counter()
        print(f"Bloco '{nome}' executado em {(t1 - t0)*1000:.2f} ms")

with cronometro("Carga de Dados"):
    total = sum(range(100_000))

🏆 Nível 4: Desafio Corporativo

Problema 12.4 — Manipulação de CSV de Alta Performance com csv.DictReader e DictWriter

Contexto: Manipulação de CSV de Alta Performance com csv.DictReader e DictWriter no contexto de Manipulação de Arquivos (Texto, CSV, JSON) e Context Managers.

Requisitos de Execução:

  1. Processar arquivo CSV massivo linha por linha com validação de colunas e gravação de saída filtrada.

Resultado Esperado

Processamento em streaming de CSV concluído com consumo desprezível de memória.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_12_4_SeuNome
  2. Envie na tarefa: Atividade Cap 12 - Manipulação de Arquivos (Texto, CSV, JSON) e Context Managers
🔑 Gabarito de Código & Solução Comentada
import csv
import io

dados_csv = "nome,salario\nCarlos,5000\nAna,7000"
leitor = csv.DictReader(io.StringIO(dados_csv))
for linha in leitor:
    print(f"Funcionario: {linha['nome']} | R$ {float(linha['salario']):.2f}")

⬅️ Voltar ao Índice de Exercícios 📚 Sumário de Tópicos