Projeto 11 - To-Do List Persistente
🎯 Objetivo
Melhorar nosso Gerenciador de Tarefas (da Aula 06) para que ele SALVE os dados em um arquivo. Assim, quando fecharmos e abrirmos o programa, as tarefas ainda estarão lá!
📋 Requisitos
- Ao iniciar, o programa deve carregar as tarefas do arquivo
tarefas.txt(se existir). - Ao adicionar uma tarefa, ela deve ser salva no arquivo.
- Ao remover uma tarefa, o arquivo deve ser atualizado (reescrito).
- O arquivo deve armazenar uma tarefa por linha.
💡 Lógica de Persistência
Temos duas estratégias principais:
- Estratégia A (Simples): Carrega tudo na memória (lista) ao iniciar. O usuário mexe na lista. Ao sair (ou a cada alteração), sobrescreve o arquivo inteiro com a lista atualizada.
- Estratégia B (Incremental): Adicionar usa append no arquivo. Remover exige reescrever.
Vamos usar a Estratégia A para facilitar a remoção.
👣 Passo a Passo
- Crie uma função
carregar_tarefas(): Tenta abrir o arquivo, lê as linhas, remove os\ne retorna uma lista. Se der erro (arquivo não existe), retorna lista vazia. - Crie uma função
salvar_tarefas(lista): Abre o arquivo em modo'w'e escreve cada item da lista seguido de\n. - No loop principal, use essas funções para manter a lista de memória e o arquivo sincronizados.
🧪 Testes Automatizados
Crie test_todo.py.
Vamos testar a persistência (Salvar e Carregar).
import os
from todo import salvar_tarefas, carregar_tarefas
def testar_persistencia():
arquivo_teste = "tarefas_teste.txt"
lista_original = ["Comprar pão", "Estudar Python"]
# 1. Salvar
# (Adapte suas funções para aceitar o nome do arquivo como parâmetro opcional,
# ou mude temporariamente a variável global do nome do arquivo)
salvar_tarefas(lista_original, nome_arquivo=arquivo_teste)
# 2. Verificar se arquivo existe
assert os.path.exists(arquivo_teste)
# 3. Carregar
lista_recuperada = carregar_tarefas(nome_arquivo=arquivo_teste)
# 4. Comparar
assert lista_recuperada == lista_original
# Limpeza (apagar arquivo de teste)
os.remove(arquivo_teste)
print("Teste de Persistência: PASSOU ✅")
if __name__ == "__main__":
testar_persistencia()
salvar e carregar precisam aceitar o nome do arquivo como argumento.
🚀 Desafio Extra
Adicione suporte a status da tarefa (Concluída/Pendente) usando um formato específico no arquivo, ex: [x] Estudar ou [ ] Dormir.