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)
2
respostas

Faça como eu fiz: arquivos e pandas

Pergunta 1: Criar uma lista vazia para armazenar os resumos dos e-mails

resumos_emails = []

Pergunta 2: Utilizar append para inserir cada resumo formatado com f-string

emails = [
    {"remetente": "João", "assunto": "Reunião"},
    {"remetente": "Maria", "assunto": "Relatório"}
]

resumos_emails = []

for email in emails:
    resumo = f"Remetente: {email['remetente']} | Assunto: {email['assunto']}"
    resumos_emails.append(resumo)

print(resumos_emails)

Pergunta 3: Retornar a lista populada após um loop

def gerar_resumos(emails):
    resumos = []

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

    return resumos

Pergunta 4: Criar e sobrescrever um arquivo TXT usando modo "w"

with open("resumos.txt", "w", encoding="utf-8") as arquivo:
    for resumo in resumos_emails:
        arquivo.write(resumo + "\n")

Pergunta 5: Ler o arquivo e salvar em uma nova lista usando strip()

lista_resumos = []

with open("resumos.txt", "r", encoding="utf-8") as arquivo:
    for linha in arquivo:
        lista_resumos.append(linha.strip())

print(lista_resumos)

Pergunta 6: Demonstrar read(), readline() e readlines()

Utilizando read()

with open("resumos.txt", "r", encoding="utf-8") as arquivo:
    conteudo = arquivo.read()

print(conteudo)

Utilizando readline()

with open("resumos.txt", "r", encoding="utf-8") as arquivo:
    primeira_linha = arquivo.readline()

print(primeira_linha)

Utilizando readlines()

with open("resumos.txt", "r", encoding="utf-8") as arquivo:
    linhas = arquivo.readlines()

print(linhas)

Pergunta 7: Importar Pandas usando o alias pd

import pandas as pd

Pergunta 8: Construir um CSV manualmente

dados = [
    {"nome": "Ana", "idade": 25},
    {"nome": "Carlos", "idade": 30}
]

with open("dados_manual.csv", "w", encoding="utf-8") as arquivo:
    arquivo.write("nome,idade\n")

    for item in dados:
        arquivo.write(f"{item['nome']},{item['idade']}\n")

Pergunta 9: Criar DataFrame e salvar com to_csv()

import pandas as pd

dados = [
    {"nome": "Ana", "idade": 25},
    {"nome": "Carlos", "idade": 30}
]

df = pd.DataFrame(dados)

df.to_csv(
    "dados_pandas.csv",
    index=False,
    encoding="utf-8"
)

Pergunta 10: Criar um arquivo TXT a partir de uma lista de perguntas

perguntas = [
    "O que é Ciência de Dados?",
    "O que é Machine Learning?",
    "O que é Big Data?",
    "O que é um DataFrame?",
    "O que é Inteligência Artificial?"
]

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

Pergunta 11: Ler as perguntas e criar uma lista

lista_perguntas = []

with open("perguntas.txt", "r", encoding="utf-8") as arquivo:
    for linha in arquivo:
        lista_perguntas.append(linha.strip())

print(lista_perguntas)

Pergunta 12: Integrar uma chamada ao LLM e salvar os resultados em CSV

import pandas as pd

lista_respostas = []

for pergunta in lista_perguntas:
    resposta = client.models.generate_content(
        model="gemini-2.5-flash",
        contents=f"Responda de forma breve: {pergunta}"
    )

    lista_respostas.append({
        "pergunta": pergunta,
        "resposta": resposta.text
    })

df = pd.DataFrame(lista_respostas)

df.to_csv(
    "perguntas_respostas.csv",
    index=False,
    encoding="utf-8"
)

Resultado Final

Arquivos gerados:

  • resumos.txt
  • dados_manual.csv
  • dados_pandas.csv
  • perguntas.txt
  • perguntas_respostas.csv

O exercício demonstra o uso de listas, dicionários, append(), leitura e escrita de arquivos TXT, criação de CSV manualmente, utilização da biblioteca Pandas e integração com um LLM para geração de respostas.

2 respostas

Olá, Estudante. Como vai?

Uau! Que postagem fantástica e completa! Você construiu uma verdadeira trilha de aprendizado prática, conectando desde a manipulação de arquivos nativa do Python até a automação poderosa com Pandas e Inteligência Artificial. A estrutura em formato de perguntas e respostas ficou muito didática.

Como você cobriu diversos fundamentos essenciais, preparei alguns complementos técnicos e boas práticas que vão enriquecer ainda mais o seu resumo e ajudar quem está acompanhando os seus passos:

Otimização com List Comprehension (Perguntas 2 e 5)

Para deixar o código em Python mais conciso e com excelente performance, podemos substituir os laços tradicionais com .append() por uma técnica chamada List Comprehension.

Na Pergunta 5, por exemplo, a leitura do arquivo e remoção das quebras de linha (\n) com strip() poderia ser resumida em uma única linha de código:

with open("resumos.txt", "r", encoding="utf-8") as arquivo:
    lista_resumos = [linha.strip() for linha in arquivo]

Detalhe Importante sobre Métodos de Leitura (Pergunta 6)

O seu exemplo demonstrando read(), readline() e readlines() foi cirúrgico! Vale a pena destacar para os colegas uma diferença crucial no consumo de memória:

  • read() e readlines() carregam o arquivo inteiro para a memória RAM de uma vez só. Se o arquivo tiver muitos gigabytes, o programa pode travar.
  • O laço for linha in arquivo (que você usou na Pergunta 5) lê o arquivo linha por linha sob demanda (iterator), sendo a forma mais eficiente e segura para arquivos grandes.

Manipulação Automatizada de Strings em Loops de LLM (Pergunta 12)

Na integração final com o Gemini, as respostas textuais dos modelos de linguagem costumam vir formatadas em Markdown (por exemplo, contendo quebras de linha ou caracteres como asteriscos e aspas).

Como o objetivo final é salvar essa resposta em uma estrutura de planilha (CSV), uma boa prática é aplicar uma limpeza leve na string recebida antes de alimentar o DataFrame, evitando que quebras de página inesperadas quebrem as linhas do seu arquivo final:

# Limpando espaços em branco extras e quebras de linha no início/fim
texto_resposta = resposta.text.strip()

lista_respostas.append({
    "pergunta": pergunta,
    "resposta": texto_resposta
})

Parabéns pelo excelente domínio técnico demonstrado em todas as etapas desse desafio. Unir engenharia de dados tradicional com LLMs é o caminho ideal para projetos modernos de IA para Dados!

Espero que possa ter lhe ajudado!

solução!

Obrigado pelo feedback!