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

Seu texto de busca "linkto:"Csv2Ldif"" não retornou nenhum resultado. Por favor mude os termos do texto, para mais informações veja HelpOnSearching.
(!) Considere fazer uma busca completa do texto com seus próprios termos.

Excluir mensagem

Csv2Ldif

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 
  28 def converte(self):
  29     Label(frame1, text="Lendo a linha de número:").grid(row=2, column=1, columnspan=3, sticky=W)
  30     a_csv=arq_csv.get()+".csv"
  31     a_ldif=arq_ldif.get()+".ldif"
  32     arquivo1=open(a_csv, 'r')
  33     a=arquivo1.readline()
  34     a=arquivo1.readline()
  35     arquivo2=open(a_ldif, 'a')
  36     n=1
  37     while a != "":
  38         cont=Label(frame1, text=n, anchor=W)
  39         cont.grid(row=2, column=6)
  40         b=a.split(';')
  41         try:
  42             primeiro_nome=b[0]
  43             segundo_nome=(b[2]+" "+b[1]).rstrip()
  44             segundo_nome=""
  45             nome_completo=b[3]
  46             email=b[4]
  47             fone_res=b[5]
  48             fax_res=b[6]
  49             fone_cel=b[7]
  50             end=b[8]
  51             cid=b[9]
  52             cep=b[10]
  53             est=b[11]
  54             pais=b[12]
  55             fone_com=b[13]
  56             fax_com=b[14]
  57             empresa=b[15]
  58         except:
  59             print "Linha: "+`n`
  60             print a
  61             print b
  62             print "O numero de parametros deve ser 16. O numero de parametros encontrados foi:"
  63             print len(b)
  64             arquivo1.close()
  65             arquivo2.close()
  66             janela.destroy()
  67         arquivo2.write('dn: cn='+nome_completo+',mail='+email+'\n')
  68         arquivo2.write('objectclass: top\n')
  69         arquivo2.write('objectclass: person\n')
  70         arquivo2.write('objectclass: organizationalPerson\n')
  71         arquivo2.write('objectclass: inetOrgPerson\n')
  72         arquivo2.write('objectclass: mozillaAbPersonAlpha\n')
  73         arquivo2.write('givenName: '+primeiro_nome+'\n')
  74         arquivo2.write('sn: '+segundo_nome+'\n')
  75         arquivo2.write('mail: '+email+'\n')
  76         arquivo2.write('modifytimestamp: 0Z\n')
  77         arquivo2.write('telephoneNumber: '+fone_com+'\n')
  78         arquivo2.write('homePhone: '+fone_res+'\n')
  79         arquivo2.write('fax: '+fax_com+'\n')
  80         arquivo2.write('mobile: '+fone_cel+'\n')
  81         arquivo2.write('street: '+end+'\n')
  82         arquivo2.write('l: '+cid+'\n')
  83         arquivo2.write('st: '+est+'\n')
  84         arquivo2.write('postalCode: '+cep+'\n')
  85         arquivo2.write('company: '+empresa+'\n')
  86         a=arquivo1.readline()
  87         n=n+1
  88     arquivo1.close()
  89     arquivo2.close()
  90 
  91 janela=Tk()
  92 janela.title(" Conversão de arquivo")
  93 frame1=Frame(janela)
  94 frame1.grid(columnspan=9)
  95 Label(frame1, text="").grid(row=0, column=0)
  96 Label(frame1, text="").grid(row=1, column=0)
  97 Label(frame1, text="").grid(row=0, column=9)
  98 Label(frame1, text="").grid(row=1, column=9)
  99 Label(frame1, text="").grid(row=2, column=0)
 100 Label(frame1, text="Nome do arquivo CSV a ser convertido (sem extensão):").grid(row=0, column=1, columnspan=3, sticky=W)
 101 Label(frame1, text="Nome do arquivo LDIF a ser gravado    (sem extensão):").grid(row=1, column=1, columnspan=3, sticky=W)
 102 arq_csv=Entry(frame1, width=15, takefocus="")
 103 arq_ldif=Entry(frame1, width=15, takefocus="")
 104 arq_csv.grid(row=0, column=4, columnspan=3, sticky=W)
 105 arq_ldif.grid(row=1, column=4, columnspan=3)
 106 
 107 
 108 inicia=Button(janela, text="INICIAR\nCONVERSÃO", fg="blue")
 109 inicia.bind("<Button-1>", converte)
 110 inicia.bind("<space>", converte)
 111 inicia.grid(row=3, columnspan=9)
 112 
 113 janela.mainloop()

Volta para CookBook.


FabianoAhlert