1
resposta

[Projeto] Desafio: Criando e manipulando arquivos

import os
import csv
import pandas as pd
from google import genai

# 1) Definir lista de perguntas sobre astronomia
lista_de_perguntas = [
    "Qual é a estrela mais próxima da Terra?",
    "O que é um buraco negro?",
    "Quantos planetas existem no sistema solar?",
    "O que é a Via Láctea?",
    "O que causa um eclipse solar?"
]

print("Etapa 1: Lista de perguntas definida.")

# 2) Criar arquivo TXT com uma pergunta por linha
with open("perguntas.txt", "w", encoding="utf-8") as f:
    for pergunta in lista_de_perguntas:
        f.write(pergunta + "\n")

print("Etapa 2: Arquivo perguntas.txt criado.")

# 3) Ler o arquivo TXT e salvar as perguntas em uma nova lista
with open("perguntas.txt", "r", encoding="utf-8") as f:
    perguntas_lidas = [linha.strip() for linha in f.readlines()]

print("Etapa 3: Perguntas lidas do arquivo TXT.")

# 4) Usar API Gemini para gerar respostas curtas
api_key = os.environ.get("GEMINI_API_KEY")
if not api_key:
    print("Erro: Variável de ambiente GEMINI_API_KEY não encontrada.")
    exit(1)

genai_client = genai.Client(api_key=api_key)

respostas = []
for pergunta in perguntas_lidas:
    try:
        resposta = genai_client.models.generate_content(
            model="gemini-2.0-flash",
            contents=pergunta
        )
        respostas.append(resposta.text.strip())
        print(f"Resposta gerada para: {pergunta[:30]}...")
    except Exception as e:
        print(f"Erro ao gerar resposta para '{pergunta}': {e}")
        respostas.append("Erro ao obter resposta")

print("Etapa 4: Respostas geradas pela API Gemini.")

# 5) Salvar perguntas e respostas em CSV
with open("perguntas_e_respostas.csv", "w", newline="", encoding="utf-8") as csvfile:
    writer = csv.writer(csvfile)
    writer.writerow(["Pergunta", "Resposta"])
    for pergunta, resposta in zip(perguntas_lidas, respostas):
        writer.writerow([pergunta, resposta])

print("Etapa 5: Arquivo perguntas_e_respostas.csv criado.")

# 6) Ler CSV com pandas e exibir tabela
df = pd.read_csv("perguntas_e_respostas.csv")
print("\nEtapa 6: Conteúdo do arquivo CSV:")
print(df.to_string(index=False))

Eu resolvi esse desafio pensando no caminho completo que a informação faz dentro do programa, porque primeiro eu monto a lista de perguntas, depois transformo essa lista em um arquivo TXT, leio esse arquivo de volta para o Python, peço as respostas e, no fim, junto tudo em um CSV para visualizar melhor. O mais interessante aqui, na minha leitura, é perceber que o exercício não é só sobre salvar arquivos, mas sobre mostrar como o mesmo conteúdo pode passar por etapas diferentes sem se perder, ficando cada vez mais organizado.

No código, eu deixei cada fase bem separada para facilitar o entendimento e evitar confusão, principalmente para quem ainda está pegando o jeito com leitura, escrita e organização dos dados. Também coloquei uma proteção simples para o caso de a chave da API não estar configurada ou alguma resposta dar erro, porque isso ajuda o programa a ficar mais claro quando algo não funciona.

1 resposta

Oii João, tudo bem?

Obrigada por compartilhar seu projeto aqui no fórum! Sua explicação sobre o "caminho completo que a informação faz dentro do programa" mostra que você absorveu bem o conceito por trás do exercício, não só a execução técnica.

O código está muito bem estruturado: cada etapa separada, prints de acompanhamento em cada fase e o tratamento de erro tanto na chave da API quanto nas chamadas ao Gemini. Esses cuidados fazem muita diferença quando o código vai crescendo.

Uma observação pequena: a lista perguntas_lidas pode incluir strings vazias se o arquivo perguntas.txt terminar com uma linha em branco. Vale considerar um filtro simples na leitura:

perguntas_lidas = [linha.strip() for linha in f.readlines() if linha.strip()]

Isso garante que nenhuma pergunta vazia vá parar na lista e depois na chamada da API.

Se quiser ir além e explorar mais possibilidades com a API do Gemini integrada ao Python:

Conte com a Alura para evoluir seus estudos. Em caso de dúvidas, fico à disposição.

Bons estudos!

Sucesso

Imagem da comunidade