yFone - Yes, outra agenda telefonica escrita em python! ;- )
Publicado por Murilo R. Esplugues 30/11/2004
[ Hits: 12.165 ]
Homepage: http://www.helpday.blogspot.com/
yFone é uma agenda telefonônica escrita em python (modo-texto) e utilizando shelve como bd. Com ele você pode adicionar, remover, pesquisar e deletar nomes e telefones de sua lista de contatos.
É extremamente simples e fácil de utilizar, ela funcionou bem com uma lista de 500 números e provavelmente suportará bem mais...
Dúvidas, sugestões: mail-me.
#!/usr/bin/env python # Fonelista (Agenda Telefonica) le, adiciona e apaga informacoes de um # banco de dados. O codigo eh pequeno e de facil entendimento. #Mesmo que nao o usem como uma agenda, ele eh util para mostrar certas funcionalidades da linguagem, como acesso a um pseudo banco de dados e tratamento de erros basico. # Este programa esta sendo distribuido livremente, voce tem liberdade # para modifica-lo e distribui-lo contanto que mantenha este aviso, a # versao, nome do autor e email. # Programa: FONELISTA 0.1 - 10/2004 # Autor: Murilo R. Esplugues # Sugestoes: murilo_esplugues@yahoo.com.br # 'shelve' eh um objeto do tipo dicionario que possui persitencia, import sys, shelve, time ## Caso nao exista tenta criar o arquivo 'contatos.db'. def abrirDB(): dbarquivo = 'contatos.db' try: global db db = shelve.open(dbarquivo) except IOError: print 'Erro ao abrir banco de dados!' sys.exit(0) print print 'Banco de dados', dbarquivo, 'aberto!' # Listando contatos def STATUS(): print '\n' * 5 COUNT = 0 LINHAS = 30 for NAME in db.keys(): TESTE = len(NAME) PONTO = '_' SINAL = -(TESTE - 22) * PONTO COUNT = COUNT + 1 if COUNT <= LINHAS: print 'Nome:',NAME,SINAL,'Numero:',db[NAME] else: more = raw_input('Mais? (s/n): ') if more in ['s','S']: COUNT = 0 elif more in ['n','N']: break else: print 'Opcao nao encontrada!' time.sleep(1) print 'Voce tem:',len(db),'registro(s)!' print ## Loop (menu), mantem o loop ate que se pressione a tecla 's' (sair) def Main(): ESCOLHA = None while ESCOLHA != 's' and ESCOLHA != 'S': print '\n' * 2 print 'Bem vindo a lista de Contatos' ESCOLHA = raw_input(""" a - Adicionar d - Deletar v - Ver s - Sair Escolha um opcao: """) if ESCOLHA in ['a','A']: adicionar() elif ESCOLHA in ['d','D']: deletar() elif ESCOLHA in ['v','D']: ver() elif ESCOLHA in ['s','S']: fecharDB() else: print 'Opcao nao encontrada' time.sleep(1) Main() ## Opcao 'v', mostra todo o dicionario, (nomes e telefones), atraves do 'STATUS' # pode-se tambem procurar por um nome aqui, faz-se o teste com 'db.has_key(VERNOME)' # para saber se ha o nome nesse banco de dados. def ver(): STATUS() if len(db) == 0: print 'Sua lista de Contatos esta vazia!' else: print print 's para sair' print VERNOME = raw_input('Digite o nome que quer ver: ') if VERNOME == 's' or VERNOME == 'S': print 'Voltando ao menu principal...' else: if db.has_key(VERNOME): MOSTRAR = db[VERNOME] print '\n' * 2 print 'NOME: ',VERNOME, 'FONE: ',MOSTRAR else: print 'Nome nao encontrado!' ## Opcao 'd', serve para deletar um registro da lista de contatos. # caso o nome dado esteja incorreto ou nao exista, python mostrara # uma mensagem de erro, isso eh novamente tratado aqui com 'db.has_key(DELETAR)' def deletar(): STATUS() if len(db) == 0: print 'Sua lista de Contatos esta vazia!' else: print print 's para sair' print DELETAR = raw_input('Digite o nome que quer apagar: ') if DELETAR == 's' or DELETAR == 'S': print 'Voltando ao menu principal' else: STATUS() if db.has_key(DELETAR): del db[DELETAR] STATUS() print 'O contato', DELETAR, 'foi apagado com sucesso!' ## Opcao 'a'. Para adicionar um registro ao banco de dados. # Caso o nome exista o registro # nao sera efetuado, caso o 'nome' tenha mais de 21 letras # ele sera rejeitado, isso eh assim para que se possa ter uma # saida bonita e organizada do 'STATUS'. def adicionar(): print print 's para sair' print MAXNAME = 21 NOME = raw_input('Nome: ') if db.has_key(NOME): print '\n', NOME,'ja existe' time.sleep(1) elif NOME in ['','\b']: print "Nome em branco nao e permitido" time.sleep(1) elif NOME == 's' or NOME == 'S': print 'Voltando ao menu principal...' elif len(NOME) > MAXNAME: print print ' Nome pode ter no maximo 21 letras!' print ' Experimente usar apenas o primeiro-nome + identificador!' print ' Ex: joao-escola' else: FONE = raw_input('Telefone: ') if FONE in ['s','S']: print 'Voltando ao menu principal...' elif FONE in ['','\b']: print 'Telefone em branco nao e permitido' time.sleep(1) else: db[NOME]=FONE STATUS() # Fechando o Db... def fecharDB(): db.close() print print 'Banco de dados fechado!' sys.exit() if __name__ == '__main__': abrirDB() Main()
Gerar backups de banco de dados MySQL
Python com CouchDB usando couchdbkit
Acompanhar status de uma replicação MySQL
Backup automatizado de toda a base MySQL
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
SysAdmin ou DevOps: Qual curso inicial pra essa área? (0)
Melhores Práticas de Nomenclatura: Pastas, Arquivos e Código (3)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta