Python
como escrever em um arquivo, ler, apagar e atualizar um arquivo

Usando o paradigma proceudural, este trabalho consiste em realizar uma aplicação Agenda de Contatos, que mantém suas informações em um arquivo chamado agenda.agd.
Essa agenda permite operações através de menu, para adicionar, excluir, editar ou enviar email para um contato, alem de listar contatos.

A operacao listar contatos permite uma serie de filtros que podem ser utilizados:
listar contatos com um determinado sobrenome,
listar contatos que residem numa determinada cidade
listar contatos que tenham um e-mail com um determinado domínio.
Cada contato é definido pela seguinte estrutura:
   Nome: primeiro nome e sobrenome;
   Endereco: Rua, número, complemento, bairro e cidade.
   Telefone: DDD e número
   E-mail: endereço contendo domínio.
Caso o arquivo não exista no diretório do programa, o arquivo deverá ser criado de forma automática.

Obs: lembrando com sempre que python considera a tabulação como divisor de conteúdo então muita anteção, estamos partindo do ponto que você já saiba configurar o ambiente Python futuramente vou colocar algumas detalhes e links sobre isso.



'''
Created on 14/06/2012
@author: Evandro, Diego, Luis
'''
#biblioteca para envio de email
import smtplib
import string



if __name__ == '__main__':
   pass
   # pega  o acao que usuario deseja realizar
   acao = raw_input("Digite o acao que voce deseja realizar"+
                    "\n 1 - Adicionar contato"+
                    "\n 2 - Excluir contato "+
                    "\n 3 - Editar contato "+
                    "\n 4 - Enviar e-mail"+
                    "\n 5 - Listar contatos "+
                    "\n 0 - Para Sair")
   
   while(acao != "0"):
   
       # acao == "1"  Adicionar contato
       if(acao == "1"):
           # pega  o nome do usuario e escreve no arquivo com limitador
           nome = raw_input("Digite o nome: ")     
           escrever = open("agendas.agd","a")
           escrever.write(nome+";")
           escrever.close()
           # pega  o endereco do usuario e escreve no arquivo com limitador
           endereco = raw_input("Digite o endereco: ")
           escrever = open("agendas.agd","a")
           escrever.write(endereco+";")
           escrever.close()   
           # pega  o email do usuario e escreve no arquivo com limitador
           email = raw_input("Digite o email: ")
           escrever = open("agendas.agd","a")
           escrever.write(email+";")
           escrever.close()
           # pega  o telefone do usuario e escreve no arquivo com limitador
           telefone = raw_input("Digite o telefone: ")
           escrever = open("agendas.agd","a")
           escrever.write(telefone+"\n")
           escrever.close()
           
           print("Ok, contato "+nome+" cadastrado")
       
       # acao == "2"  Excluir contato    
       if(acao == "2"):
           # contador tem uma funcao importante de contar linhas
           count = 0
           # pega  o nome do contato para apagar
           nome_apagar = raw_input("Digite o nome do contato para apagar ")
           # pega  o arquivo le e joga em um array dividido por linhas
           arquivo = open("agendas.agd","r")             
           linhas  = arquivo.read()        
           arraycontato   = string.split(linhas,"\n")
           
           '''print 'Conta nro de linhas =' + str(len(arraycontato))'''
           # limpa arquivo
           escrever = open("agendas.agd","w")
           escrever.write("")
           escrever.close()    
           #itera contato apartir de arraycontato para pegar separado detalhes do contado    
           for contato in arraycontato:  
               
               #separa detalhes do contato                 
               detalhecontato  = string.split(contato,";")   
               #compara detalhe do primeiro detalhe do contato que eh nome
               # pra verificar se eh igual ao nome a apagar      
               # se for igual ele nao insere  no arquvo novo que esta sendo gerado
               if(detalhecontato[0] == nome_apagar):
           
                   count = count + 1
                   
               else:
                   #insere contato no arquivo, quando nao cair na regra nome a apagar igual ao primeiro detalhe do contato        
                   escrever = open("agendas.agd","a")
                   escrever.write(arraycontato[count]+"\n")
                   escrever.close()     
   
                   print arraycontato[count]
                   count = count + 1
                   
       if(acao == "3"):
           # contador tem uma funcao importante de contar linhas
           count = 0
           # pega  o nome do contato para Editar
           nome_editar = raw_input("Digite o nome do contato para Editar ")
           # pega  o arquivo le e joga em um array dividido por linhas
           arquivo = open("agendas.agd","r")             
           linhas  = arquivo.read()        
           arraycontato   = string.split(linhas,"\n")
           #limpa o arquivo       
           limpar = open("agendas.agd","w")
           limpar.write("")
           limpar.close()
           #itera contato apartir de arraycontato para pegar separado detalhes do contado    
           for contato in arraycontato:  
               
               #separa detalhes do contato                          
               detalhecontato  = string.split(contato,";")   
               #compara detalhe do primeiro detalhe do contato que eh nome
               # pra verificar se eh igual ao nome a apagar      
               # se for igual ele nao insere  no arquvo novo que esta sendo gerado         
               if(detalhecontato[0] == nome_editar):
                   #altera o conteudo do contato desejado
                   detalhecontato[0] = raw_input("Nome do contato "+detalhecontato[0]+" Editar ? Se desejar escreva novo nome, se nao escreva o atual")
                   detalhecontato[1] = raw_input("Endreco do contato "+detalhecontato[1]+" Editar ? Se desejar escreva novo endereco, se nao escreva o atual")
                   detalhecontato[2] = raw_input("Email do contato "+detalhecontato[2]+" Editar ? Se desejar escreva novo email, se nao escreva o atual")
                   detalhecontato[3] = raw_input("Telefone do contato "+detalhecontato[3]+" Editar ? Se desejar escreva novo telefone, se nao escreva o atual")
                                 
                   # atribui novos valores ao contato escolhido
                   arraycontato[count] = detalhecontato[0]+";"+detalhecontato[1]+";"+detalhecontato[2]+";"+detalhecontato[3]
               
               #insere contato no arquivo   
               escrever = open("agendas.agd","a")
               escrever.write(arraycontato[count]+"\n")
               escrever.close()     
   
               print arraycontato[count]
               count = count + 1
   
       if(acao == "4"):
           # pega  o nome do contato para enviar email           
           nome_enviaremail = raw_input("Digite o nome do contato para enviar email ")
           # pega  o arquivo le e joga em um array dividido por linhas
           arquivo = open("agendas.agd","r")             
           linhas  = arquivo.read()
                  
           arraycontato   = string.split(linhas,"\n")
           
           for contato in arraycontato:  
                            
               detalhecontato  = string.split(contato,";")   
                        
               if(detalhecontato[0] == nome_enviaremail):
        
                   SMTP_SERVER = 'smtp.gmail.com'
                   SMTP_PORT = 587
                    
                   sender = 'dfpsg3@gmail.com'
                   recipient = detalhecontato[2]
                   subject = 'Python Contato'
                   body = 'Ola '+detalhecontato[0]
                   body = ""+body+"\n"+ str(raw_input("Digite sua mensagem para o contato "+detalhecontato[0]))
                   
                    
                   "Sends an e-mail to the specified recipient."
                    
                   body = "" + body + ""
                    
                   headers = ["From: " + sender,
                              "Subject: " + subject,
                              "To: " + recipient,
                              "MIME-Version: 1.0",
                              "Content-Type: text/html"]
                   headers = "\r\n".join(headers)
                    
                   session = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)
                    
                   session.ehlo()
                   session.starttls()
                   session.ehlo
                   session.login(sender, "suasenha")
                    
                   session.sendmail(sender,"dfpsg3@gmail.com", headers + "\r\n\r\n" + body)
                   session.sendmail(sender,recipient, headers + "\r\n\r\n" + body)
                   print "De:"+sender
                   print "Para:"+recipient
                   print "Cabecalho: "+headers
                   print "Corpo: \n"+body
                   session.quit()
                   
       if(acao == "5"):
                   
           arquivo = open("agendas.agd","r")
           linhas = arquivo.read()
           print linhas
   
           sobrenome = raw_input("Digite o sobrenome ")
           arquivo = open("agendas.agd","r")             
           linhas  = arquivo.read()        
           arraycontato   = string.split(linhas,"\n")
           
           for contato in arraycontato:  
                            
               detalhecontato  = string.split(contato,";")
               detalhenome   = string.split(detalhecontato[0]," ")
               contnome = len(detalhenome)-1
                        
               if(detalhenome[contnome] == sobrenome):
                   
                   print contato
                   
           cidade_pes = raw_input("Digite a Cidade ")
           arquivo = open("agendas.agd","r")             
           linhas  = arquivo.read()        
           arraycontato = string.split(linhas,"\n")
           
           for contato in arraycontato:  
               
               if(contato != ""):  
                          
                   detalhecontato  = string.split(contato,";")
                   detalhenome   = string.split(detalhecontato[1],",")
                   contnome = len(detalhenome)-1
                  
                                            
                   if(detalhenome[4] == cidade_pes):
                       
                       print contato
       
       
           email_pes = raw_input("Digite o final do Email ")
           arquivo = open("agendas.agd","r")             
           linhas  = arquivo.read()        
           arraycontato = string.split(linhas,"\n")
           
           for contato in arraycontato:  
               
               if(contato != ""):  
                          
                   detalhecontato  = string.split(contato,";")
                   detalhenome   = string.split(detalhecontato[2],"@")
                   contnome = len(detalhenome)-1
                  
                                            
                   if(detalhenome[1] == email_pes):
                       
                       print contato

       # pega  o acao que usuario deseja realizar
       acao = raw_input("\n Digite o acao que voce deseja realizar"+
                    "\n 1 - Adicionar contato"+
                    "\n 2 - Excluir contato "+
                    "\n 3 - Editar contato "+
                    "\n 4 - Enviar e-mail"+
                    "\n 5 - Listar contatos "
                    "\n 0 - Para Sair")