Agenda de compromissos
Publicado por Alexis Huf 04/09/2006
[ Hits: 11.129 ]
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()
Web Scraping para coletar dados dos pilotos da Fórmula 1
Agenda de cadastros com tratamento de erros
Organizando suas músicas com Python
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
VOL já não é mais como antes? (5)
É normal não gostar de KDE? (12)
E aí? O Warsaw já está funcionando no Debian 13? [RESOLVIDO] (15)
Secure boot, artigo interessante, nada técnico. (4)
copiar library para diretorio /usr/share/..... su com Falha na a... (1)









