Solucionado (ver solução)

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!

Solucionado
(ver solução)
1
resposta

[Projeto] Faça como eu fiz: arquivos e pandas | Python: Inteligência Artificial Aplicada

===== PARTE 1: Processamento de E-mails =====

def gerar_resumos_emails(emails):
resumos = []
for email in emails:
resumo = f"De: {email['remetente']} | Assunto: {email['assunto']}"
resumos.append(resumo)
return resumos

===== PARTE 2: Salvar resumos em arquivo TXT =====

def salvar_resumos_txt(resumos, arquivo='resumos.txt'):
with open(arquivo, 'w', encoding='utf-8') as f:
f.writelines([r + '\n' for r in resumos])
print(f"Arquivo '{arquivo}' criado com sucesso!")

===== PARTE 3: Ler arquivo TXT =====

def ler_resumos_txt(arquivo='resumos.txt'):
with open(arquivo, 'r', encoding='utf-8') as f:
linhas = [linha.strip() for linha in f.readlines()]
return linhas

Explorando diferentes metodos de leitura

def explorar_metodos_leitura(arquivo='resumos.txt'):
# read() - retorna uma string
with open(arquivo, 'r') as f:
conteudo_completo = f.read()

# readline() - retorna uma linha por vez
with open(arquivo, 'r') as f:
    primeira_linha = f.readline().strip()

# readlines() - retorna lista de linhas
with open(arquivo, 'r') as f:
    todas_linhas = f.readlines()

return conteudo_completo, primeira_linha, todas_linhas

===== PARTE 4: CSV Manual =====

def criar_csv_manual(arquivo='dados.csv'):
with open(arquivo, 'w', encoding='utf-8') as f:
f.write('id,remetente,assunto,data\n')
f.write('1,joao@email.com,Reuniao segunda,2024-01-15\n')
f.write('2,maria@email.com,Projeto novo,2024-01-16\n')

===== PARTE 5: Pandas DataFrame e CSV =====

def criar_df_pandas():
dados = [
{'id': 1, 'remetente': 'joao@email.com', 'assunto': 'Reuniao', 'data': '2024-01-15'},
{'id': 2, 'remetente': 'maria@email.com', 'assunto': 'Projeto', 'data': '2024-01-16'}
]
df = pd.DataFrame(dados)
df.to_csv('dados_pandas.csv', index=False, encoding='utf-8')
return df

===== PARTE 6: Desafio de Perguntas com LLM =====

def desafio_perguntas_llm():
perguntas = [
"O que e Python?",
"Para que serve Pandas?",
"Como ler um arquivo em Python?"
]

# Salvar perguntas em arquivo txt
with open('perguntas.txt', 'w', encoding='utf-8') as f:
    f.writelines([p + '\n' for p in perguntas])

# Ler perguntas de volta
with open('perguntas.txt', 'r', encoding='utf-8') as f:
    perguntas_lidas = [linha.strip() for linha in f.readlines()]

# Integrar com LLM Anthropic
client = Anthropic()
resultados = []

for pergunta in perguntas_lidas:
    response = client.messages.create(
        model="claude-3-5-sonnet-20241022",
        max_tokens=150,
        messages=[
            {"role": "user", "content": f"Responda de forma sucinta (1-2 linhas): {pergunta}"}
        ]
    )
    resposta = response.content[0].text
    resultados.append({'pergunta': pergunta, 'resposta': resposta})

# Salvar em CSV final
df_respostas = pd.DataFrame(resultados)
df_respostas.to_csv('perguntas_respostas.csv', index=False, encoding='utf-8')

return resultados

===== EXECUCAO COMPLETA =====

if name == "main":
# 1. Processar emails
emails = [
{'remetente': 'joao@email.com', 'assunto': 'Reuniao de projeto'},
{'remetente': 'maria@email.com', 'assunto': 'Atualizacao do sistema'}
]
resumos = gerar_resumos_emails(emails)

# 2. Salvar e ler txt
salvar_resumos_txt(resumos)
resumos_lidos = ler_resumos_txt()
print("Resumos lidos:", resumos_lidos)

# 3. Explorar metodos
conteudo, linha1, todas = explorar_metodos_leitura()

# 4. CSV e Pandas
criar_csv_manual()
df = criar_df_pandas()

# 5. Desafio com LLM
print("Processando perguntas com LLM...")
resultados = desafio_perguntas_llm()
print("Resultados salvos em 'perguntas_respostas.csv'")

::

Resumo do que foi implementado:

Funcao gerar_resumos_emails: Cria lista com f-strings formatadas
Arquivo TXT com writelines: Salva resumos com '\n'
Leitura com strip(): Remove quebras de linha
Tres metodos explorados: read(), readline(), readlines()
CSV manual: Escrito com cabecalho e dados
Pandas DataFrame: Criado e exportado com to_csv() e UTF-8
Desafio completo: Arquivo txt de perguntas, leitura, chamada LLM Anthropic, salvamento em CSV

1 resposta
solução!

Olá, Estudante. Como vai?

Excelente trabalho! O seu script é um exemplo perfeito de como unir a engenharia de dados tradicional (manipulação de arquivos locais e uso do Pandas) com o ecossistema moderno de Inteligência Artificial através da API da Anthropic. O código está muito bem modularizado em funções, o que facilita bastante a manutenção e a leitura.

Para enriquecer ainda mais o seu aprendizado e trazer boas práticas importantes do mercado para o seu projeto, destaquei alguns pontos técnicos fundamentais:

1. Codificação de Caracteres (Encoding) ao Ler Arquivos

Na Parte 2, você teve a excelente prática de definir explicitamente o encoding='utf-8' ao salvar o arquivo TXT, garantindo que acentos e caracteres especiais não sejam corrompidos. No entanto, na Parte 3 (dentro da função explorar_metodos_leitura), o parâmetro encoding acabou sendo omitido na abertura das funções de leitura.

  • Por que isso é um perigo? Se você salvar um arquivo em utf-8 e tentar lê-lo sem especificar o encoding em sistemas operacionais diferentes (como o Windows, que frequentemente usa o padrão cp1252), o Python pode disparar um erro do tipo UnicodeDecodeError ou carregar o texto com caracteres quebrados.
  • Boa Prática: Sempre que abrir um arquivo com with open(), seja para leitura ('r') ou escrita ('w'), defina explicitamente o encoding='utf-8'.

2. Otimização de Performance com readlines() e Loops

Na Parte 2, você usou uma compreensão de lista (list comprehension) muito inteligente para adicionar a quebra de linha: f.writelines([r + '\n' for r in resumos]). Essa abordagem funciona muito bem.

Contudo, ao ler arquivos grandes na Parte 3 com o método f.readlines(), o Python carrega o arquivo inteiro e cria uma lista com todas as linhas de uma vez na memória RAM. Se o seu arquivo de e-mails ou perguntas crescer para milhares de linhas, isso pode sobrecarregar o sistema.

Em Python, o próprio objeto do arquivo aberto funciona como um iterador de linhas. Você pode ler linha por linha gastando o mínimo de memória possível fazendo apenas isso:

with open(arquivo, 'r', encoding='utf-8') as f:
    linhas = [linha.strip() for linha in f]

3. Pequena Correção na Inicialização do Script

No bloco de execução final, notei um pequeno detalhe de sintaxe na verificação do escopo principal:

if name == "main":

Para que o Python reconheça corretamente a execução direta deste arquivo como o script principal, a variável global e o valor literal precisam dos dois sublinhados (dunder ou double underscore) antes e depois das palavras. O ajuste correto é:

if __name__ == "__main__":

Parabéns pelo resumo detalhado ao final da atividade e pela estrutura lógica do desafio integrando o Claude. Salvar as interações da LLM diretamente em um DataFrame e exportar para um CSV final (perguntas_respostas.csv) é exatamente o fluxo utilizado para criar relatórios, auditorias e históricos de chamadas em aplicações reais!

Espero que possa ter lhe ajudado!