Aprender a manipular informações externas é um dos grandes marcos na jornada de qualquer programador. Se você está dando seus primeiros passos na lógica de programação com Python, entender como salvar e validar dados de usuários é essencial. Criar um sistema de login simples com Python e TXT é o projeto perfeito para praticar conceitos de leitura e escrita de arquivos, além de estruturas de controle de fluxo de forma prática e direta.
Embora em aplicações profissionais utilizemos bancos de dados robustos como o MySQL ou PostgreSQL, o uso de arquivos de texto (.txt) oferece uma maneira didática e leve de entender a persistência de dados. Neste guia, vamos construir do zero um sistema capaz de cadastrar novos usuários e validar o acesso de perfis já existentes, salvando tudo em um arquivo comum no seu computador.
Por que utilizar arquivos TXT para um sistema de login?
O uso de arquivos de texto é ideal para pequenos scripts, ferramentas de automação local ou protótipos rápidos. A principal vantagem é a simplicidade: você não precisa instalar servidores de banco de dados complexos ou configurar conexões de rede. Tudo o que você precisa é das funções nativas do Python para lidar com o sistema de arquivos.
Além disso, ao trabalhar com TXT, você reforça conhecimentos sobre como as strings em Python são manipuladas e como o computador interpreta quebras de linha e separadores. É uma base sólida antes de avançar para formatos mais estruturados, como o JSON ou bancos de dados relacionais.
Preparando o Ambiente de Desenvolvimento
Antes de começarmos a digitar o código, certifique-se de que você tem o Python instalado em sua máquina. Para uma melhor experiência de escrita e depuração, recomendamos a instalação e configuração do VS Code, que possui ótimas extensões para Python.
Crie uma pasta exclusiva para este projeto. Dentro dela, vamos trabalhar com dois arquivos principais: um script Python (ex: main.py) e um arquivo de texto onde as credenciais serão armazenadas (ex: usuarios.txt). Não é necessário criar o arquivo TXT manualmente agora; o nosso código pode fazer isso automaticamente caso ele não exista.
Estrutura básica do sistema de login
Nosso sistema será dividido em três funcionalidades principais: um menu interativo, uma função para cadastrar novos usuários e uma função para realizar o login. Para organizar o fluxo, utilizaremos o conceito de funções em Python, o que torna o código mais limpo e fácil de manter.
Passo 1: Criando o Menu de Opções
O primeiro passo é criar uma interface no terminal para que o usuário escolha o que deseja fazer. Vamos usar um laço de repetição para garantir que o programa continue rodando até que o usuário decida sair.
def menu():
print("\n--- SISTEMA DE ACESSO ---")
print("1. Cadastrar novo usuário")
print("2. Fazer Login")
print("3. Sair")
opcao = input("Escolha uma opção: ")
return opcaoNesta etapa, utilizamos a função input() para capturar a escolha do usuário. É uma forma simples de interação que serve como base para muitos scripts de terminal.
Passo 2: Desenvolvendo a Função de Cadastro
Agora, precisamos de uma forma de salvar o nome de usuário e a senha. Para manter o arquivo organizado, salvaremos cada usuário em uma linha nova, separando o nome da senha por um caractere especial, como uma vírgula ou ponto e vírgula.
def cadastrar():
usuario = input("Digite o novo nome de usuário: ")
senha = input("Digite a nova senha: ")
with open("usuarios.txt", "a") as arquivo:
arquivo.write(f"{usuario},{senha}\n")
print("Usuário cadastrado com sucesso!")Aqui, usamos o gerenciador de contexto with open(). Essa é a maneira recomendada de abrir arquivos no Python, pois ela garante que o arquivo seja fechado corretamente, mesmo que ocorra um erro durante a escrita. O modo “a” (append) adiciona o conteúdo ao final do arquivo sem apagar o que já existe.
Passo 3: Lógica de Verificação de Login
A parte mais importante é a validação. Precisamos ler o arquivo usuarios.txt, percorrer cada linha e verificar se o par usuário/senha digitado corresponde a algum registro salvo.
def login():
usuario_input = input("Usuário: ")
senha_input = input("Senha: ")
sucesso = False
try:
with open("usuarios.txt", "r") as arquivo:
for linha in arquivo:
usuario_salvo, senha_salva = linha.strip().split(",")
if usuario_input == usuario_salvo and senha_input == senha_salva:
sucesso = True
break
except FileNotFoundError:
print("Erro: Nenhum usuário cadastrado ainda.")
return
if sucesso:
print("Login realizado com sucesso! Bem-vindo.")
else:
print("Usuário ou senha incorretos.")Nesta função, utilizamos o método strip() para remover espaços e quebras de linha e o split(",") para separar o nome da senha. Também aplicamos um bloco try-except em Python para evitar que o programa trave caso o arquivo de texto ainda não tenha sido criado.
Melhorando a segurança com Hash de Senhas
Salvar senhas em texto puro, como estamos fazendo agora, é uma prática insegura. Se alguém tiver acesso ao seu arquivo TXT, verá todas as senhas. Em projetos reais, aplicamos técnicas de criptografia conhecidas como “hashing”.
Python oferece bibliotecas nativas como a hashlib para transformar uma senha em uma cadeia de caracteres irreconhecível. Embora este tutorial foque no básico, é altamente recomendável estudar sobre hash de senhas em Python para evoluir a segurança dos seus sistemas conforme você ganha experiência.
Lidando com erros comuns no sistema de login
Ao lidar com arquivos e entradas de usuário, diversos erros podem surgir. Um dos mais comuns é o usuário tentar fazer login antes de qualquer cadastro existir, o que gera o erro de arquivo não encontrado. Outro problema frequente é a inserção de vírgulas no campo de usuário, o que quebraria nossa lógica de split(",").
Para um sistema mais robusto, você poderia adicionar validações para impedir caracteres especiais ou garantir que os campos não fiquem vazios. O uso de estruturas if, elif e else ajuda a criar essas camadas de proteção, garantindo que o fluxo do programa seja previsível e seguro.
Organizando o fluxo principal
Para que tudo funcione, precisamos de um laço principal que chame as funções criadas de acordo com a escolha do usuário. Isso é o que chamamos de “ponto de entrada” do script.
def executar():
while True:
escolha = menu()
if escolha == "1":
cadastrar()
elif escolha == "2":
login()
elif escolha == "3":
print("Saindo do sistema...")
break
else:
print("Opção inválida!")Utilizar um while True permite que o sistema de login simples com Python e TXT continue operando até que o usuário explicitamente escolha a opção de sair, oferecendo uma experiência de uso contínua.
Código Completo do Projeto
Abaixo, apresentamos o código unificado. Você pode copiar este bloco, salvar em um arquivo chamado sistema_login.py e executá-lo imediatamente em seu terminal.
# Sistema de Login Simples com Python e TXT
def menu():
"""Exibe o menu principal e retorna a opção escolhida."""
print("\n" + "="*20)
print(" SISTEMA DE ACESSO")
print("="*20)
print("1. Cadastrar novo usuário")
print("2. Fazer Login")
print("3. Sair")
return input("Escolha uma opção: ")
def cadastrar():
"""Registra um novo usuário no arquivo usuarios.txt."""
usuario = input("Digite o novo nome de usuário: ").strip()
senha = input("Digite a nova senha: ").strip()
if not usuario or not senha:
print("Erro: Usuário e senha não podem estar vazios.")
return
# O modo 'a' adiciona ao final do arquivo sem sobrescrever
with open("usuarios.txt", "a") as arquivo:
arquivo.write(f"{usuario},{senha}\n")
print(f"Usuário '{usuario}' cadastrado com sucesso!")
def login():
"""Valida as credenciais comparando com o arquivo usuarios.txt."""
usuario_input = input("Usuário: ").strip()
senha_input = input("Senha: ").strip()
encontrado = False
try:
with open("usuarios.txt", "r") as arquivo:
for linha in arquivo:
# Divide a linha pela vírgula e remove espaços/quebras de linha
partes = linha.strip().split(",")
if len(partes) == 2:
usuario_salvo, senha_salva = partes
if usuario_input == usuario_salvo and senha_input == senha_salva:
encontrado = True
break
except FileNotFoundError:
print("Aviso: Nenhum banco de dados de usuários encontrado. Cadastre um usuário primeiro.")
return
if encontrado:
print(f"Sucesso: Bem-vindo ao sistema, {usuario_input}!")
else:
print("Erro: Usuário ou senha incorretos.")
def iniciar():
"""Controla o fluxo principal do programa."""
while True:
opcao = menu()
if opcao == "1":
cadastrar()
elif opcao == "2":
login()
elif opcao == "3":
print("Encerrando o programa. Até logo!")
break
else:
print("Opção inválida. Tente novamente.")
if __name__ == "__main__":
iniciar()Dicas para expandir seu projeto
Depois de dominar este sistema básico, você pode começar a adicionar funcionalidades mais avançadas. Uma excelente ideia é criar um gerador de senhas no Python integrado ao cadastro, para sugerir combinações fortes ao usuário.
Outra evolução natural é a criação de uma interface visual. Em vez de ler e escrever apenas no terminal, você pode usar bibliotecas como o Tkinter para criar interfaces gráficas com Python, tornando seu sistema de login muito mais profissional e amigável para usuários comuns.
Para saber mais sobre o gerenciamento de diretórios e arquivos de forma mais moderna, vale a pena consultar a documentação oficial da biblioteca pathlib do Python ou as especificações sobre conceitos de criptografia na Wikipédia para entender como proteger dados sensíveis em aplicações reais.
Perguntas Frequentes
O arquivo TXT é seguro para guardar senhas?
Não. Arquivos TXT podem ser lidos por qualquer pessoa com acesso ao computador. Para projetos reais, utilize bancos de dados e hashing de senhas.
O que acontece se eu apagar o arquivo usuarios.txt?
O sistema perderá todos os cadastros. Ao tentar fazer login, o Python exibirá a mensagem de erro tratada no bloco try-except.
Como posso permitir que o usuário use vírgulas na senha?
Neste sistema simples, o uso da vírgula confunde o comando split. Para resolver, você pode usar um separador mais raro (como | ou 😉 ou migrar para arquivos JSON.
Posso usar esse sistema em uma página web?
Para web, o ideal é usar frameworks como Flask ou Django, que já possuem sistemas de autenticação integrados e muito mais seguros.
Como faço para a senha não aparecer no terminal enquanto digito?
Você pode importar o módulo nativo getpass e usar getpass.getpass() no lugar do input() para senhas.
Python cria o arquivo automaticamente?
Sim, o modo “a” (append) do comando open() cria o arquivo automaticamente caso ele não exista no diretório atual.
Posso cadastrar dois usuários com o mesmo nome?
Nesta versão simplificada, sim. Para evitar isso, você deve adicionar uma lógica que verifica se o nome já existe no TXT antes de salvar o novo cadastro.
Este código funciona em celulares?
Sim, você pode rodar este script em aplicativos que executam Python no Android ou iOS, como o Pydroid 3 ou o Pythonista.
Agora que você entendeu como funciona a base de um sistema de login, o próximo passo é praticar. Tente modificar o código para incluir um campo de “e-mail” ou uma função de “remover usuário”. A programação é uma habilidade prática, e cada pequena modificação ajudará você a fixar o conteúdo e se tornar um desenvolvedor mais completo.







