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

(27. Python: Inteligência Artificial Aplicada ) Faça como eu fiz: arquivos e pandas

Nesta aula, foram abordados conceitos de leitura e escrita de arquivos em Python e a manipulação de dados com o Pandas.

Agora é a sua chance de praticar os conteúdos vistos. Para isso:

Crie uma lista vazia para armazenar os resumos dos e-mails.
Utilize a função append para inserir cada resumo formatado via fString na lista.
Configure a função para retornar a lista populada após um loop de iterações.

import os,time,pandas as pd
from google.colab import userdata
from google import genai

os.environ['GOOGLE_API_KEY']=userdata.get('IA-Aplicada')
client=genai.Client()

emails=[
"Quero informações sobre o curso de Python.",
"Meu pedido está atrasado.",
"Não consigo acessar minha conta.",
"Quero cancelar minha assinatura."
]

def gerar_resumos():

    resumos=[]

    for email in emails:

        r=client.models.generate_content(
            model="gemini-2.5-flash",
            contents=f"Resuma em uma linha: {email}"
        )

        resumos.append(f"{email} - {r.text}")

        time.sleep(7)

    return resumos

resumos=gerar_resumos()

with open("lista-de-resumos.txt","w",encoding="utf-8") as arq:

    for item in resumos:
        arq.write(item+"\n")

print(resumos)

Implemente o with open com modo 'W' para criar e sobrescrever um arquivo .txt com os resumos.
Use write ou write lines com '\n' para separar cada entrada no arquivo.
Abra o arquivo em modo 'R' e leia suas linhas, salvando em uma nova lista com strip para remover quebras de linha.
Explore os métodos read, readline e readlines para diferentes formas de leitura em Python.

lista=[]

with open("lista-de-resumos.txt","r",encoding="utf-8") as arq:

    for linha in arq:
        lista.append(linha)

print(lista)

with open("lista-de-resumos.txt","r",encoding="utf-8") as arq:
    print(arq.read())

with open("lista-de-resumos.txt","r",encoding="utf-8") as arq:
    print(arq.readline())

with open("lista-de-resumos.txt","r",encoding="utf-8") as arq:
    print(arq.readlines())

with open("lista-de-resumos.txt","r",encoding="utf-8") as arq:
    lista2=[l.strip() for l in arq]

print(lista2)

Importe o Pandas utilizando o alias pd para manipulação de dados.
Construa um arquivo .csv manualmente, escrevendo o cabeçalho e as linhas com as chaves de cada dicionário.
Crie um DataFrame com a lista de dicionários e utilize o método to_csv para salvar o CSV com encoding UTF-8.

import pandas as pd

dados=[
    {
        "nome":"Eduardo",
        "cidade":"Recife"
    },
    {
        "nome":"Maria",
        "cidade":"Olinda"
    },
    {
        "nome":"João",
        "cidade":"Jaboatão"
    }
]

with open("dados.csv","w",encoding="utf-8") as arq:

    arq.write("nome,cidade\n")

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

df=pd.DataFrame(dados)

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

print(df.head())

Desenvolva um desafio para gerar um arquivo .txt a partir de uma lista de perguntas e depois lê-lo para criar uma lista.
Integre uma chamada ao LLM para obter respostas sucintas, associando cada pergunta com sua resposta e salvando o resultado final em um novo arquivo .csv.

perguntas=[
    "O que é Python?",
    "O que é IA?"
]

with open("perguntas.txt","w",encoding="utf-8") as arq:

    for p in perguntas:
        arq.write(p+"\n")

lista=[]

with open("perguntas.txt","r",encoding="utf-8") as arq:
    lista=[l.strip() for l in arq]

dados=[]

for pergunta in lista:

    r=client.models.generate_content(
        model="gemini-2.5-flash",
        contents=f"Responda resumidamente: {pergunta}"
    )

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

    time.sleep(7)

with open("respostas.csv","w",encoding="utf-8") as arq:

    arq.write("pergunta,resposta\n")

    for item in dados:
        arq.write(f"{item['pergunta']},{item['resposta']}\n")

df2=pd.DataFrame(dados)

df2.to_csv(
    "respostas2.csv",
    index=False,
    encoding="utf-8"
)

print(df2.head())
1 resposta

Olá, Eduardo. Como vai?

Parabéns pela excelente resolução da atividade! O seu código está extremamente organizado, bem estruturado e demonstra que você compreendeu perfeitamente como integrar a API do Gemini com a manipulação de arquivos nativa do Python e o poder do Pandas.

A forma como você estruturou o fluxo — criando os arquivos de texto, tratando as quebras de linha com o strip(), gerenciando as requisições com o time.sleep(7) para respeitar as taxas de limite (Rate Limits) da API e gerando os DataFrames com Pandas — está impecável.

Para agregar ainda mais valor ao seu projeto prático, preparei algumas sugestões de boas práticas e melhorias de código que são amplamente utilizadas no mercado quando trabalhamos com IA e análise de dados:

1. Tratamento de Caracteres Especiais no CSV (Boas Práticas)

As respostas geradas por IA costumam conter quebras de linha (\n) ou vírgulas. Quando você escreve um arquivo CSV manualmente usando apenas arq.write(), se a resposta da IA contiver uma vírgula, o arquivo CSV pode quebrar, interpretando aquela vírgula como uma nova coluna.

Como você já está utilizando o Pandas, o método df.to_csv() cuida disso automaticamente, adicionando aspas onde for necessário. Se um dia precisar salvar um CSV na mão sem o Pandas, a biblioteca nativa csv do Python resolve esse problema de forma simples:

import csv

with open("respostas_seguro.csv", "w", newline="", encoding="utf-8") as arq:
    escritor = csv.writer(arq)
    # Escreve o cabeçalho
    escritor.writerow(["pergunta", "resposta"])
    
    # Escreve as linhas tratando vírgulas e aspas automaticamente
    for item in dados:
        escritor.writerow([item["pergunta"], item["resposta"]])

2. Otimizando a leitura de arquivos com List Comprehension

No seu código, você utilizou muito bem a List Comprehension para remover os caracteres de quebra de linha com o strip(). Essa é a forma mais performática e elegante no Python para ler arquivos pequenos e médios. Veja como o bloco de leitura fica limpo:

with open("perguntas.txt", "r", encoding="utf-8") as arq:
    lista = [linha.strip() for linha in arq]

3. Evitando strings poluídas com .strip() na IA

Modelos de linguagem frequentemente adicionam uma quebra de linha extra no final do texto gerado. Uma boa prática ao salvar o retorno da API no dicionário é aplicar o .strip() diretamente no r.text. Isso garante que o seu DataFrame e o seu CSV fiquem totalmente limpos, sem espaços em branco desnecessários:

dados.append({
    "pergunta": pergunta,
    "resposta": r.text.strip()
})

Seu desafio final conectando a lista de perguntas, salvando em .txt, consultando o modelo gemini-2.5-flash e exportando para o Pandas fechou a atividade com chave de ouro. Continue com esse excelente nível de dedicação!

Espero que possa ter lhe ajudado!