💡 Por que geramos os arquivos via código em sala de aula?
Em turmas presenciais ou online, pedir para os alunos baixarem 4 arquivos externos e fazerem upload no Colab costuma atrasar a aula em 20 minutos por problemas de permissão ou pastas erradas. Ao rodar as Células 2A e 2B, o próprio script constrói os 4 arquivos defeituosos diretamente na máquina virtual do aluno. Peça para eles clicarem no ícone de Pasta 📁 na barra esquerda do Colab após rodar o código para verem os arquivos surgirem!
# ====================================================================
# AULA 1 - CÉLULA 2A: GERANDO DADOS BRUTOS (CSV DO MKT E JSON DO APP)
# ====================================================================
# [COMANDO NOVO] Aspas Triplas ("""): Permitem criar um texto longo
# com várias linhas no Python preservando as quebras de linha (Enter).
# Erros propositais simulados no CSV:
# 1. Separador ponto e vírgula (;) típico de Excel em português;
# 2. Espaços inúteis no nome (" ana silva ") e e-mail em MAIÚSCULO;
# 3. Valores com símbolo "R$" e vírgula decimal;
# 4. Cliente Beatriz (103) sem e-mail cadastrado (vazio entre ;;);
# 5. Ana Silva duplicada na linha 104 com CPF sem pontos e "Sao Paulo" sem til!
csv_content = """id_cliente;nome_completo;email;documento;valor_gasto;cidade;feedback_sac
101; ana silva ;ANA@GMAIL.COM;111.222.333-44;R$ 1500,50;São Paulo;Adorei o atendimento, muito rápido!
102;Carlos Moura;carlos@hotmail.com;22233344455;R$ 300,00;Rio de Janeiro;Produto atrasou 10 dias, péssimo suporte.
103;Beatriz Costa;;333.444.555-66;R$ 0,00;Curitiba;Ainda não recebi meu acesso ao sistema.
104;ana silva;ana@gmail.com;11122233344;R$ 1500,50;Sao Paulo;Adorei o atendimento, muito rápido!"""
# [COMANDO NOVO] with open(..., "w", encoding="utf-8") as f:
# Cria um arquivo físico no Colab em modo de escrita ("w" = write).
# O parâmetro encoding="utf-8" protege acentos e 'ç'. O bloco 'with'
# fecha e salva o arquivo automaticamente ao terminar o bloco.
with open("clientes_marketing.csv", "w", encoding="utf-8") as f:
# [COMANDO NOVO] .strip(): Remove espaços ou quebras de linha
# vazias que tenham sobrado nas extremidades do texto.
f.write(csv_content.strip())
# Criando a estrutura do Aplicativo Mobile (Lista de Dicionários JSON).
# Repare que os nomes das colunas estão em inglês e há um valor None (nulo).
json_data = [
{
"user_id": "201",
"full_name": "Marcos Vinicius",
"contact_mail": "marcos@tech.com",
"cpf": "444.555.666-77",
"total_spent": 4520.00,
"location": "Belo Horizonte",
"review": "O app trava na tela de pagamento, quase desisti."
},
{
"user_id": "202",
"full_name": " FERNANDA LIMA ",
"contact_mail": "fernanda@lima.com.br",
"cpf": "55566677788",
"total_spent": None,
"location": "Porto Alegre",
"review": "Cancelei minha assinatura, achei caro pelo que entrega."
},
{
"user_id": "203",
"full_name": "Roberto Dias",
"contact_mail": "roberto@dias.com",
"cpf": "666.777.888-99",
"total_spent": 890.90,
"location": "São Paulo",
"review": "Excelente custo-benefício, recomendo para todos!"
}
]
# [COMANDO NOVO] json.dump(..., ensure_ascii=False, indent=4):
# Grava a lista do Python como um arquivo JSON oficial no disco:
# - ensure_ascii=False: Mantém os acentos reais no arquivo.
# - indent=4: Formata o código com 4 espaços de recuo para leitura humana.
with open("clientes_app.json", "w", encoding="utf-8") as f:
json.dump(json_data, f, ensure_ascii=False, indent=4)
print("📁 Parte 1 concluída: 'clientes_marketing.csv' e 'clientes_app.json' criados!")
# ====================================================================
# AULA 1 - CÉLULA 2B: GERANDO DADOS BRUTOS (EXCEL E XML DO ERP LEGADO)
# ====================================================================
# [COMANDO NOVO] pd.DataFrame({...}): Cria uma tabela estruturada em
# memória usando o Pandas. Cada chave do dicionário vira uma coluna.
# Erros propositais: Texto "N/A" na coluna numérica de faturamento e
# a cliente Ana Silva (CPF 111.222.333-44) repetida mais uma vez!
df_excel = pd.DataFrame({
"cod_cli": [301, 302, 303],
"cliente": ["Juliana Paes", "Pedro Alvares", "Ana Silva"],
"e_mail": ["ju@paes.com", "pedro@brasil.com", "ana@gmail.com"],
"nr_cpf": ["777.888.999-00", "888.999.000-11", "111.222.333-44"],
"faturamento": ["2100.75", "N/A", "1500.50"],
"uf_cidade": ["Salvador", "Recife", "São Paulo"],
"observacao": [
"Cliente VIP, sempre paga em dia.",
"Pediu desconto na renovação, ameaçou sair.",
"Comprou pacote anual."
]
})
# [COMANDO NOVO] .to_excel(..., index=False): Salva a tabela do Pandas
# diretamente como uma planilha oficial do Microsoft Excel (.xlsx).
# O argumento index=False impede a criação de uma coluna extra (0, 1, 2).
df_excel.to_excel("clientes_financeiro.xlsx", index=False)
# Criando um arquivo XML (típico de sistemas de Notas Fiscais e ERPs antigos).
# No XML, os dados ficam envoltos em tags de abertura <tag> e fechamento </tag>.
xml_content = """<?xml version="1.0" encoding="UTF-8"?>
<cadastros>
<registro>
<codigo>401</codigo>
<nome>Camila Pitanga</nome>
<correio>camila@globo.com</correio>
<cadastro_pessoa>999.888.777-66</cadastro_pessoa>
<receita>3200.00</receita>
<municipio>Rio de Janeiro</municipio>
<historico>Renovou contrato ontem, muito elogiou a equipe.</historico>
</registro>
<registro>
<codigo>402</codigo>
<nome> bruno gagliasso</nome>
<correio>BRUNO@SURUBIM.COM</correio>
<cadastro_pessoa>12345678909</cadastro_pessoa>
<receita>150.00</receita>
<municipio>Sao Paulo</municipio>
<historico>Furioso com cobrança indevida no cartão.</historico>
</registro>
</cadastros>"""
with open("clientes_erp_legado.xml", "w", encoding="utf-8") as f:
f.write(xml_content.strip())
print("📁 Parte 2 concluída: Todos os 4 arquivos brutos estão prontos na pasta do Colab!")