Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

Aula 4 - Faça como eu fiz: arquivos e pandas

import os
import random
import pandas as pd
from groq import Groq

client = Groq()

emails_brutos = [
    {"id": 1, "assunto": "Feedback da reunião", "conteudo": "A apresentação foi excelente e fechamos o cronograma."},
    {"id": 2, "assunto": "Aviso de Manutenção", "conteudo": "O servidor ficará instável nesta madrugada das 2h às 4h."},
    {"id": 3, "assunto": "Parceria Comercial", "conteudo": "Gostaríamos de agendar uma call para apresentar nossa proposta."}
]

def gerar_lista_resumos(lista_de_emails):
    lista_resumos = []
    for email in lista_de_emails:
        resumo_formatado = f"E-mail ID {email['id']} ({email['assunto']}): {email['conteudo']}"
        lista_resumos.append(resumo_formatado)
    return lista_resumos

resumos_processados = gerar_lista_resumos(emails_brutos)

print("=== 1. ESCRITA E LEITURA DE TXT ===")

with open("resumos_emails.txt", "w", encoding="utf-8") as arquivo_txt:
    for resumo in resumos_processados:
        arquivo_txt.write(resumo + "\n")
print("Arquivo 'resumos_emails.txt' gerado com sucesso!")

print("\n--- Demonstrando formas de leitura ---")

with open("resumos_emails.txt", "r", encoding="utf-8") as f:
    conteudo_completo = f.read()
    print(f"-> Exemplo read() (Tamanho do caractere: {len(conteudo_completo)})")

with open("resumos_emails.txt", "r", encoding="utf-8") as f:
    primeira_linha = f.readline()
    print(f"-> Exemplo readline(): {primeira_linha.strip()}")

lista_linhas_limpas = []
with open("resumos_emails.txt", "r", encoding="utf-8") as f:
    linhas_brutas = f.readlines()
    for linha in linhas_brutas:
        lista_linhas_limpas.append(linha.strip())

print(f"-> Exemplo readlines() + strip (Total de itens na lista: {len(lista_linhas_limpas)})")
print("-" * 50)

print("=== 2. CRIAÇÃO E MANIPULAÇÃO DE CSV ===")

with open("dados_manuais.csv", "w", encoding="utf-8") as csv_manual:
    csv_manual.write("id,assunto,conteudo\n")
    for email in emails_brutos:
        linha_csv = f"{email['id']},{email['assunto']},{email['conteudo']}\n"
        csv_manual.write(linha_csv)
print("Arquivo 'dados_manuais.csv' criado manualmente!")

df_emails = pd.DataFrame(emails_brutos)
df_emails.to_csv("dados_pandas.csv", index=False, encoding="utf-8")
print("Arquivo 'dados_pandas.csv' exportado via Pandas com encoding UTF-8!")
print("-" * 50)

print("=== 3. DESAFIO COMPLETO: PERGUNTAS, RESPOSTAS E LLM ===")

perguntas_iniciais = [
    "Qual é a função principal da biblioteca Pandas no Python?",
    "Por que usamos a cláusula 'with open' ao manipular arquivos?",
    "O que significa o encoding UTF-8 ao salvar um DataFrame?"
]

with open("perguntas_desafio.txt", "w", encoding="utf-8") as f_perguntas:
    for pergunta in perguntas_iniciais:
        f_perguntas.write(pergunta + "\n")

lista_perguntas_lidas = []
with open("perguntas_desafio.txt", "r", encoding="utf-8") as f_leitura:
    for linha in f_leitura:
        lista_perguntas_lidas.append(linha.strip())

lista_dados_finais = []

print("Iniciando chamadas à API do Groq para responder as perguntas...")
for idx, pergunta in enumerate(lista_perguntas_lidas, start=1):
    try:
        completion = client.chat.completions.create(
            model="llama3-8b-8192",
            messages=[
                {
                    "role": "system", 
                    "content": "Você é um professor de programação direto ao ponto. Responda à pergunta do usuário de forma extremamente sucinta, em no máximo 15 palavras."
                },
                {
                    "role": "user", 
                    "content": pergunta
                }
            ],
            temperature=0.3,
            max_tokens=40
        )
        resposta_sucinta = completion.choices[0].message.content.strip()
    except Exception as e:
        resposta_sucinta = f"Erro ao obter resposta da LLM: {e}"
        
    print(f"Perguntas respondidas: {idx}/{len(lista_perguntas_lidas)}")
    
    dicionario_qa = {
        "pergunta": pergunta,
        "resposta": resposta_sucinta
    }
    lista_dados_finais.append(dicionario_qa)

df_resultado_final = pd.DataFrame(lista_dados_finais)
df_resultado_final.to_csv("resultado_desafio_llm.csv", index=False, encoding="utf-8")

print("\nDesafio Concluído!")
print("Dicionários estruturados gerados:")
print(lista_dados_finais)
print("\nArquivo final 'resultado_desafio_llm.csv' salvo com sucesso!")
1 resposta

Olá, Julia. Como vai?

Seu código demonstra um domínio sólido dos conceitos abordados na aula. Você implementou corretamente a manipulação de arquivos com leitura e escrita em diferentes formatos, desde arquivos de texto até CSV, e integrou tudo isso com uma chamada à API do Groq de forma elegante. A estrutura do seu projeto segue uma progressão lógica que facilita o entendimento de cada etapa.

O tratamento com encoding UTF-8 em todas as operações de arquivo foi bem implementado, garantindo compatibilidade com caracteres especiais. Continue explorando essas bibliotecas e não hesite em compartilhar dúvidas e soluções no fórum, que permanece à disposição para discussões.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!