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!

2
respostas

[Projeto] Faça como eu fiz: arquivos e pandas

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.

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.

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.

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.

lista_resumos_emails = []

lista_de_emails = [
    {
        "remetente": "carlos@empresa.com",
        "assunto"  : "Relatório Mensal",
        "texto"    : "Vendas cresceram 15% em relação ao mês anterior."
    },
    {
        "remetente": "rh@empresa.com",
        "assunto"  : "Novo Benefício",
        "texto"    : "Atualização do plano de saúde disponível no portal."
    }
]

for email in lista_de_emails:
  lista_resumos_emails.append(f"Remetente: {email['remetente']}\nAssunto: {email['assunto']}\nTexto: {email['texto']}")
  
print(lista_resumos_emails)


def processar_resumos(lista_de_emails, nome_arquivo="resumos_emails.txt"):
  resumos = []

  for email in lista_de_emails:
    resumo_formatado = f"Remetente: {email['remetente']}\nAssunto: {email['assunto']}\nTexto: {email['texto']}"
    resumos.append(resumo_formatado)

  with open(nome_arquivo, mode='w', encoding='utf-8') as arquivo:
    for linha in resumos:
      arquivo.write(f"{linha}\n")

  return resumos

resultado = processar_resumos(lista_de_emails)
print(f"Arquivo 'resumos_emails.txt' gerado com sucesso!")


def salvar_com_writelines(lista_de_emails, nome_arquivo="resumos_emails.txt"):
  resumos = []
  
  for email in lista_de_emails:
    resumo_formatado = f"Remetente: {email['remetente']}\nAssunto: {email['assunto']}\nTexto: {email['texto']}"
    resumos.append(resumo_formatado)

  with open(nome_arquivo, mode='w', encoding='utf-8') as arquivo:
    arquivo.writelines(f"{linha}\n" for linha in resumos)

  return resumos  

  salvar_com_writelines(lista_de_emails, "resumos_emails.txt")


def salvar_com_write(lista_de_emails, nome_arquivo="resumos_emails.txt"):
  resumos = []
  
  for email in lista_de_emails:
    resumo_formatado = f"Remetente: {email['remetente']}\nAssunto: {email['assunto']}\nTexto: {email['texto']}"
    resumos.append(resumo_formatado)

  with open(nome_arquivo, mode='w', encoding='utf-8') as arquivo:
    for linha in resumos:
      arquivo.write(f"{linha}\n")

  return resumos  

salvar_com_write(lista_de_emails, "resumos_emails.txt")


def ler_resumos_emails(nome_arquivo='resumos_emails.txt'):
  linhas_limpas = []

  with open(nome_arquivo, mode='r', encoding='utf-8') as arquivo:
    for linha in arquivo:
      linhas_limpas.append(linha.strip())
  
  return linhas_limpas

resumos_carregados = ler_resumos_emails(nome_arquivo="resumos_emails.txt")


# Explorar Métodos read, readline e readlines
# Método read - Lê todo o conteúdo de uma só vez e devolve como uma única string.
with open("resumos_emails.txt", "r", encoding="utf-8") as arquivo:
  conteudo = arquivo.read()

print("Tipo", type(conteudo))
print("Conteúdo do arquivo:\n", conteudo)


# Método readline - Lê uma linha por vez a cada chamada, avançando o cursor do arquivo para a linha seguinte, devolve como uma string (uma única linha).
with open("resumos_emails.txt", mode='r', encoding='utf-8') as arquivo:
  linha = arquivo.readline()
  while linha:
    print(linha.strip())
    linha = arquivo.readline()


# Método readlines - Lê o arquivo inteiro de uma só vez, quebra o conteúdo pelas quebras de linha e devolve como uma lista de strings.
with open("resumos_emails.txt", mode='r', encoding='utf-8') as arquivo:
  linhas = arquivo.readlines()

print("Tipo:", type(linhas))
print("Quantidade de linhas:", len(linhas)) 

for linha in linhas:
  linhas_limpas = linha.strip()
  print(linhas_limpas)
2 respostas

Continuação da resolução:

import pandas as pd

def criar_csv_manualmente(lista_de_emails, nome_arquivo="resumos_emails.csv"):
  if not lista_de_emails:
    return

  chaves = list(lista_de_emails[0].keys())

  with open(nome_arquivo, mode='w', encoding='utf-8', newline='') as arquivo:
    linha_cabecalho = ",".join(chaves) + "\n"
    arquivo.write(linha_cabecalho)

    for email in lista_de_emails:
      valores = [f'"{email[chave]}"' for chave in chaves]
      linha_dados = ",".join(valores) + "\n"
      arquivo.write(linha_dados)


criar_csv_manualmente(lista_de_emails, "resumos_emails.csv")

df_emails = pd.DataFrame(lista_de_emails)
df_emails.to_csv("resumos_emails_pandas.csv", index=False, encoding='utf-8')
print(df_emails)


# Desenvolver um desafio para gerar um arquivo .txt a partir de uma lista de perguntas e depois lê-lo para criar uma lista.

perguntas_originais = [
    "Qual é o único pássaro que consegue voar para trás?",
    "Qual pássaro é conhecido por imitar sons e a voz humana?",
    "Qual é a ave mais rápida do mundo em mergulho?",
    "O pinguim é considerado uma ave que sabe voar?",
]

nome_arquivo = "perguntas.txt"

with open(nome_arquivo, mode='w', encoding='utf-8') as arquivo:
  for pergunta in perguntas_originais:
    arquivo.write(f"{pergunta}\n")

print(f"Arquivo '{nome_arquivo}' gerado com sucesso!")

perguntas_carregadas = []

with open(nome_arquivo, mode='r', encoding='utf-8') as arquivo:
  for linha in arquivo:
    perguntas_carregadas.append(linha.strip())

print("\n\nPerguntas carregadas do arquivo: \n")
for i, pergunta in enumerate(perguntas_carregadas, 1):
  print(f"{i}. {pergunta}")


import os
from google.colab import userdata
os.environ["GOOGLE_API_KEY"] = userdata.get('GEMINI_API_KEY_1')
from google import genai

nome_arquivo_txt = "perguntas.txt"
perguntas = []

with open(nome_arquivo_txt, mode='r', encoding='utf-8') as arquivo:
  for linha in arquivo:
    perguntas.append(linha.strip())

client = genai.Client()
dados_processados = []

for pergunta in perguntas:
  prompt = f"Responda à seguinte pergunta de forma extremamente sucinta (1 frase): \v{pergunta}"

  response = client.models.generate_content(
      model="gemini-2.5-flash",
      contents=prompt
  )

  resposta_limpa = response.text.strip()
  dados_processados.append({
      "pergunta": pergunta, 
      "resposta": resposta_limpa})

df_resultado = pd.DataFrame(dados_processados)
df_resultado.to_csv("respostas_perguntas.csv", index=False, encoding='utf-8')
print(df_resultado)

Boa tarde, Thayane! Tranquilo?

Gostei demais da sua solução, continue assim!

Mandou muito bem explorando a manipulação de listas em Python, apresentou com clareza diferentes formas de escrita em arquivos (write e writelines) e ainda destacou o uso dos métodos de leitura como read, readline e readlines. Esse exercício mostra organização, domínio prático e preocupação em compreender como cada abordagem impacta o processamento de dados.

Se quiser aprofundar ainda mais, algumas boas práticas são:

  • Tratamento de erros: incluir try/except para lidar com falhas de leitura ou escrita.
  • Context Manager: sempre usar with open(...) para garantir fechamento automático do arquivo.
  • Estrutura modular: transformar cada operação em funções reutilizáveis para facilitar manutenção e testes.

Continue postando as suas soluções! Além de ganhar pontos de XP na plataforma, você pode ajudar outros estudantes no fórum.

Ah, uma pergunta: você prefere explorar diferentes métodos de leitura/escrita para entender suas particularidades ou consolidar logo uma abordagem padrão que use sempre nos seus projetos?

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

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