5893
Comentário: Viajei, tinha colocado Firefox, o certo é Thunderbird!!!
|
5893
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.