Agenda de compromissos
Publicado por Alexis Huf 04/09/2006
[ Hits: 10.833 ]
Esse script armazena compromissos usando arquivos texto como banco de dados. Ele permite pesquisar, listar, remover e visualizar entradas. A função 3 só funciona em POSIX e Windows.
#!/usr/bin/python # -*- coding: utf-8 -*- #Programa que grava os compromissos, usa um arquivo de texto como 'bd' ### --- imports --- ### import os import time from sys import exit ### --- defs --- ### def adi(): if OS == 'posix' or OS == 'nt': os.system(clear) nome = raw_input('Nome do compromisso: ') if nome == '': opc = raw_input('Não é recomendável deixar o nome do compromisso em branco, tem certeza de que deseja fazer isso? (s/N) ') if opc == 'S': time.sleep(0.5) elif opc == 's': time.sleep(0.5) else: menu() descr = raw_input('Descrição do compromisso: ') data = raw_input('Data do compromisso (dd/mm/aaaa): ') if len(data) != 10: print 'Você forneceu uma data inválida, use o formato "dd/mm/aaa" !' time.sleep(1.5) menu() dd = data[0:2] mm = data[3:5] aaaa = data[6:10] arqnome = dd + '-' + mm + '-' + aaaa + ' - ' + nome entradas = os.listdir(dir_dados) if arqnome in entradas: opc = raw_input('ATENÇÃO!!! Já existe uma entrada %s deseja sobreescreve-la? (s/N) ' % arqnome) if opc == 'S': time.sleep(0.5) elif opc == 's': time.sleep(0.5) else: adi() arq = open(arqnome,'a') arq.write(descr) arq.close() print '---' print 'Entrada adicionada com sucesso!' enter = raw_input('(Pressione ENTER para continuar)') menu() # def rem(): # if OS == 'posix' or OS == 'nt': # os.system(clear) # f = 0 # entradas = os.listdir(dir_dados) # n_entradas = len(entradas) # if n_entradas < 1: # print 'Você não tem nenhuma entrada de compromisso gravada.' # menu() # elif n_entradas > 1: # print 'Compromissos:\n' # entradas.sort() # for n in entradas: # print n # print '\n' # nome = raw_input('Digite o nome por completo do compromisso que você deseja remover: ') # # elif n_entradas == 1: # nome = entradas[0] # print 'Só há o compromisso %s' % nome # opc = raw_input('Tem certeza que deseja remover o compromisso %s? (s/N)' % nome) # if opc == 'S' or opc == 's': # try: # os.remove(nome) # except OSError: # print 'A entrada %s não existe' % nome # f = 1 # if f == 0: # print ' ' # print 'A entrada foi removida com sucesso' # else: # time.sleep(0.5) # enter = raw_input('(Pressione ENTER para continuar)') # f = 0 # menu() def listar(): f = 0 if OS == 'posix' or OS == 'nt': os.system(clear) entradas = os.listdir(dir_dados) entradas.sort() if entradas == []: print 'Não há nenhuma entrada armazenada!' time.sleep(1.5) menu() print 'Compromissos:' for n in entradas: print n print '---' nome = raw_input('Qual é a entrada que você deseja ver ou remover? ') entradas = os.listdir(dir_dados) nomes = [] nomesc = [] for n in entradas: no = n n = n[13:] if n == nome: nomes.append(n) nomesc.append(no) vezes = nomes.count(nome) if vezes == 0: print 'Ops, a entrada que você forneceu não é válida' enter = raw_input('(Pressione ENTER para continuar)') menu() elif vezes == 1: nome = nomesc[0] print nome else: for n in nomesc: print n print '---' vr = raw_input('Deseja ver ou remover essas entradas? (V/r) ') if vr == 'R' or vr == 'r': try: for n in nomesc: os.remove(n) except OSError: print 'As entradas não existem' f = 1 if f == 0: print ' ' print 'As entradas foram removidas com sucesso!' else: try: arq = open(nome,'r') descr = arq.read() except IOError: print 'Ops, a entrada que você forneceu não é válida' enter = raw_input('(Pressione ENTER para continuar)') menu() print ' ' print '--- %s ---' % nome print '%s' % descr print '--- %s ---' % nome print ' ' enter = raw_input('(Pressione ENTER para continuar)') menu() def proc(): f = 0 if OS == 'posix' or OS == 'nt': os.system(clear) os.chdir(dir_dados) if OS == 'posix' or OS == 'nt': string = raw_input('Digite algo para pesquisar: ') if string == '': print 'Você DEVE digitar algo se quer fazer uma pesquisa!' time.sleep(2) menu() elif OS == 'posix': com = 'ls | grep ' + string + ' &> listagem-compromissos.tmp' erro = '' elif OS == 'nt': com = 'dir /B' + ' | find "' + string + '" > listagem-compromissos.tmp' erro = '' os.system(com) resultadoa = open('listagem-compromissos.tmp','r') resultados = resultadoa.read() resultadoa.close() resultadoa = open('listagem-compromissos.tmp','r') resultado = resultadoa.readlines() if resultados == erro: resultadoa.close() os.remove('listagem-compromissos.tmp') print 'Sua busca não retornou nenhum resultado' enter = raw_input('(Pressione ENTER para continuar)') proc() else: resultadoa.close() os.remove('listagem-compromissos.tmp') print ' ' for n in resultado: print n ent = raw_input('Qual é a entrada que deseja ver? ') ent = ent + '\n' ents = [] entsc = [] for n in resultado: no = n[:-1] n = n[13:] if n == ent: ents.append(n) entsc.append(no) vezes = ents.count(ent) if vezes == 0: print 'Ops, a entrada que você forneceu não é válida' enter = raw_input('(Pressione ENTER para continuar)') menu() elif vezes == 1: ent = entsc[0] else: for n in entsc: print n ent = raw_input('Escolha uma entrada digitando-a por completo: ') vr = raw_input('Você deseja ver a descrição do compromisso ou remove-lo? (V/r) ') if vr == 'r' or vr == 'R': try: os.remove(ent) except OSError: print 'A entrada %s não existe' % ent f = 1 if f == 0: print ' ' print 'A entrada foi removida com sucesso' else: try: arq = open(ent,'r') descr = arq.read() arq.close except IOError: print 'Ops, a entrada que você forneceu não é válida' enter = raw_input('(Pressione ENTER para continuar)') menu() print ' ' print '--- %s ---' % ent print descr print '--- %s ---' % ent else: print 'Desculpe, mas essa função só está disponível para sistemas posix e nt, você vai ter que usar a opção "Listar Todas as Entradas"' print ' ' enter = raw_input('(Pressione ENTER para continuar)') menu() def ajuda(): if OS == 'posix' or OS == 'nt': os.system(clear) print ' --- Ajuda --- ' print '''Sobre o que você gostaria de obter ajuda? 1. Adicionar uma entrada 2. Listar Todas as entradas 3. Pesquisar Uma entrada 0. Voltar ao menu principal''' opc = raw_input(' >> ') if opc == '1': if OS == 'posix' or OS == 'nt': os.system(clear) print ''' Essa função vai adicionar uma entrada ao "banco de dados", ou seja, ela vai criar um arquivo correspondente a entrada na pasta "dados-compromissos". Esse arquivo vai ter como nome a data do compromisso seguida do nome do mesmo (dd-mm-aaaa - nome). O nome do compromisso pode conter quaisquer carecteres que você usaria para dar nomes de arquivos no sistema operacional que você está usando, no windows você não deve usar caracteres como \ / : * ? " " < > | e em sistemas posix não há restrições, mas em ambos não é recomendável usar esses caracteres e outros como ; & % $ # [] etc. Em ambos os sistemas você pode usar espaços e acentos sem maiores preocupações. O campo de descrição não é de preenchimento obrigatório, seu conteúdo será gravado dentro do arquivo, e você pde usar qualquer caractere. O campo da data deve ser obrigatoriamente preenchido, e no formato dd/mm/aaaa, você pode trocar a barra por qualquer outro caractere como - + = ou até letras comuns, mas deve ser usado UM caractere como separa dor e sempre dois digitos para dia e mês e quatro para o ano, o 0 deve ser usado no caso de números menores de 10.''' print ' ' enter = raw_input('(Pressione ENTER para continuar)') ajuda() elif opc == '2': if OS == 'nt' or OS == 'posix': os.system(clear) print ''' Essa função vai ler todas as entradas armazenadas e mostrar uma lista. Você pode escolher qualquer opção digitando o nome do compromisso (sem a data precedendo) e a função vai procurar todos os nomes exatamente iguais, ou seja a função é CaSeSeNsItIvE e dd é diferente de DD e de ddd! Uma vez exibidas as entradas combinadas, você será questionado se quer ver todas as entradas exibidas ou se quer remove-las. Tome cuidado com a ultima opção, ela é irreversível. Caso você selecione "Ver", todas as entradas serão exibidas sequêncialmente no seguinte formato: --- entrada --- descrição da entrada --- entrada --- Se você selecionar a opção remover as entradas serão apagadas para sempre.''' print ' ' enter = raw_input('(Pressione ENTER para continuar)') ajuda() elif opc == '3': if OS == 'nt' or OS == 'posix': os.system(clear) print ''' Essa função está disponível apenas para sistemas Windows (tm) e posix, ela vai usar os utilitários de listagem "DIR" no Windows e "ls" nos de padrão posix. Ao escolher essa opção você deverá digitar alguyma coisa para pesquisar, essa função é CaSeSeNsItIvE e irá procurar por ocorrências do valor digitado em qualquer lugar do nome do arquivo da entrada, que é composto por "data - nome". Depois ela irá exibir uma lista das entradas que contém o valor digitado. Caso haja mais de um resultado, você terá de informar a entrada desejada digitand-a por completo, incuisive a data, caso haja apenas uma entrada, isso não será necessário. Depois você será questionado se deseja ver o conteúdo da entrada ou se deseja remove-la. Caso você selecione "Ver", todas aentrada será exibida no seguinte formato: --- entrada --- descrição da entrada --- entrada --- Se você selecionar a opção remover a entrada será apagada para sempre.''' print ' ' enter = raw_input('(Pressione ENTER para continuar)') ajuda() elif opc == '0': menu() else: print 'Opção inválida' time.sleep(1.5) ajuda() def menu(): if OS == 'posix' or OS == 'nt': os.system(clear) print '''Escolha uma opção: 1. Adicionar uma entrada 2. Listar Todas as entradas 3. Pesquisar Uma entrada 4. Ajuda 0. Sair''' opc = raw_input('>> ') if opc == '1': adi() elif opc == '2': listar() elif opc == '3': proc() elif opc == '4': ajuda() elif opc == '0': if OS == 'posix' or OS == 'nt': os.system(clear) exit() else: while opc != '1' and opc != '0': print 'Você digitou uma opção inválida!' time.sleep(1.5) menu() ### --- nucleo --- ### cont = 0 dir_prin = os.getcwd() OS = os.name if OS == 'nt': clear = 'cls' elif OS == 'posix': clear = 'clear' try: os.chdir('dados-compromissos') except OSError: os.mkdir('dados-compromissos') os.chdir('dados-compromissos') dir_dados = os.getcwd() menu()
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