associação pythonbrasil[11] django zope/plone planet Início Logado como (Entrar)

Diferenças para "Csv2Ldif"

Diferenças entre as versões de 3 e 4
Revisão 3e 2006-09-25 13:57:23
Tamanho: 5893
Comentário: Viajei, tinha colocado Firefox, o certo é Thunderbird!!!
Revisão 4e 2008-09-26 14:07:49
Tamanho: 5893
Editor: localhost
Comentário: converted to 1.6 markup
Nenhuma diferença encontrada!

Receita: csv2ldif

Ao mudar meu cliente de e-mail de Outlook Express para Thunderbird, encontrei uma dificuldade para passar meu address book de um para outro. O Thunderbird estava lendo o arquivo CSV (exportado do OE) e as informações ficavam todas bagunçadas. A solução que encontrei foi fazer um pequeno script que faz a conversão do formato CSV para LDIF, que pelo que vi, é o padrão do Thunderbird.

O que o script faz é simplesmente ler linha por linha o arquivo CSV e guardar estas informações em um arquivo LDIF.

O script usa Tkinter (não seria necessário, mas fiz apenas para deixar uma interface gráfica com o usuário. Note que no formato CSV deve ser seguida determinada ordem, ou então será necessário mexer no script. Outro item importante é cuidar para que nos campos de endereço, por exemplo, não tenha <ENTER> pressionado, separando uma linha e outra (endereço e cidade ou bairro, por exemplo), pois isso pode "quebrar" uma linha no arquivo e certamente ocorrerá um erro no tratamento...

Quem quiser melhorar, pode postar novos códigos ou alterações abaixo, certamente serão bem-vindos! ;-)

Código

   1 #!/usr/bin/env python
   2 
   3 #-----------------------------------------------------------------------------
   4 # Name:        csv2ldif.py
   5 # Purpose:     gerar um arquivo com formato LDIF (address book do Thunderbird) a partir de um arquivo CSV (formato alternativo de exportação do Outlook Express)
   6 #
   7 # Author:      Fabiano Charlier Ahlert
   8 #
   9 # Created:     2006/06/12
  10 # RCS-ID:      $Id: module1.py $
  11 # Copyright:   (c) 2006
  12 # Licence:     GPL
  13 # New field:   Ver observações abaixo
  14 #-----------------------------------------------------------------------------
  15 # Desenvolvido por Fabiano Charlier Ahlert
  16 # Instruções
  17 # Copie este arquivo para a mesma pasta do arquivo CSV a ser convertido
  18 # e execute-o
  19 # Este programa realiza a conversão de arquivos CSV (gerados pelo Outlook
  20 # a partir do bloco de endereços) para arquiso LDIF (arquivo para importação
  21 # para o bloco de endereços do Mozilla
  22 # as colunas do arquivo CSV devem estar na seguinte ordem:
  23 # Nome;Sobrenome;Segundo nome;Nome;End. de email;Telefone residencial;Fax residencial;Telefone celular;Rua do endereço comercial;Cidade do endereço comercial;CEP do endereço comercial;Estado do endereço comercial;País/região do endereço comercial;Telefone comercial;Fax comercial;Empresa
  24 # se o seu arquivo tiver uma estrutura diferente, faça as devidas alterações.... ;-)
  25 
  26 from Tkinter import *
  27 import string
  28 
  29 def converte(self):
  30     Label(frame1, text="Lendo a linha de número:").grid(row=2, column=1, columnspan=3, sticky=W)
  31     a_csv=arq_csv.get()+".csv"
  32     a_ldif=arq_ldif.get()+".ldif"
  33     arquivo1=open(a_csv, 'r')
  34     a=arquivo1.readline()
  35     a=arquivo1.readline()
  36     arquivo2=open(a_ldif, 'a')
  37     n=1
  38     while a != "":
  39         cont=Label(frame1, text=n, anchor=W)
  40         cont.grid(row=2, column=6)
  41         b=string.split(a, ';')
  42         try:
  43             primeiro_nome=b[0]
  44             segundo_nome=string.rstrip(b[2]+" "+b[1])
  45             segundo_nome=""
  46             nome_completo=b[3]
  47             email=b[4]
  48             fone_res=b[5]
  49             fax_res=b[6]
  50             fone_cel=b[7]
  51             end=b[8]
  52             cid=b[9]
  53             cep=b[10]
  54             est=b[11]
  55             pais=b[12]
  56             fone_com=b[13]
  57             fax_com=b[14]
  58             empresa=b[15]
  59         except:
  60             print "Linha: "+`n`
  61             print a
  62             print b
  63             print "O numero de parametros deve ser 16. O numero de parametros encontrados foi:"
  64             print len(b)
  65             arquivo1.close()
  66             arquivo2.close()
  67             janela.destroy()
  68         arquivo2.write('dn: cn='+nome_completo+',mail='+email+'\n')
  69         arquivo2.write('objectclass: top\n')
  70         arquivo2.write('objectclass: person\n')
  71         arquivo2.write('objectclass: organizationalPerson\n')
  72         arquivo2.write('objectclass: inetOrgPerson\n')
  73         arquivo2.write('objectclass: mozillaAbPersonAlpha\n')
  74         arquivo2.write('givenName: '+primeiro_nome+'\n')
  75         arquivo2.write('sn: '+segundo_nome+'\n')
  76         arquivo2.write('mail: '+email+'\n')
  77         arquivo2.write('modifytimestamp: 0Z\n')
  78         arquivo2.write('telephoneNumber: '+fone_com+'\n')
  79         arquivo2.write('homePhone: '+fone_res+'\n')
  80         arquivo2.write('fax: '+fax_com+'\n')
  81         arquivo2.write('mobile: '+fone_cel+'\n')
  82         arquivo2.write('street: '+end+'\n')
  83         arquivo2.write('l: '+cid+'\n')
  84         arquivo2.write('st: '+est+'\n')
  85         arquivo2.write('postalCode: '+cep+'\n')
  86         arquivo2.write('company: '+empresa+'\n')
  87         a=arquivo1.readline()
  88         n=n+1
  89     arquivo1.close()
  90     arquivo2.close()
  91 
  92 janela=Tk()
  93 janela.title(" Conversão de arquivo")
  94 frame1=Frame(janela)
  95 frame1.grid(columnspan=9)
  96 Label(frame1, text="").grid(row=0, column=0)
  97 Label(frame1, text="").grid(row=1, column=0)
  98 Label(frame1, text="").grid(row=0, column=9)
  99 Label(frame1, text="").grid(row=1, column=9)
 100 Label(frame1, text="").grid(row=2, column=0)
 101 Label(frame1, text="Nome do arquivo CSV a ser convertido (sem extensão):").grid(row=0, column=1, columnspan=3, sticky=W)
 102 Label(frame1, text="Nome do arquivo LDIF a ser gravado    (sem extensão):").grid(row=1, column=1, columnspan=3, sticky=W)
 103 arq_csv=Entry(frame1, width=15, takefocus="")
 104 arq_ldif=Entry(frame1, width=15, takefocus="")
 105 arq_csv.grid(row=0, column=4, columnspan=3, sticky=W)
 106 arq_ldif.grid(row=1, column=4, columnspan=3)
 107 
 108 
 109 inicia=Button(janela, text="INICIAR\nCONVERSÃO", fg="blue")
 110 inicia.bind("<Button-1>", converte)
 111 inicia.bind("<space>", converte)
 112 inicia.grid(row=3, columnspan=9)
 113 
 114 janela.mainloop()

Volta para CookBook.


FabianoAhlert