По работе часто приходится заниматься импортом в Mozilla Tunderbird из OutlookExpress. Если с импортом сообщений проблем не наблюдается, то с адресной книгой полная неразбериха — виной тому разные разделители используемые OutlookExpress (запятые), Tunderbird (точка с запятой) и разные наименования полей и их порядок.
До недавнего времени в связи с редкими операциями по импорту адресной книги из OutlookExpress я решал эту проблему через текстовый редактор с помощью поиска-замены, но в данный момент мы переходим на Window7 c Windows XP, где как известно нет OutlookExpress, как стандартный почтовый клиент был выбран Mozilla Tunderbird и собственно появилось желание немного автоматизировать этот процесс с помощью скрипта на Python, т.к. мы активно его используем для написания скриптов. Возможно есть и другие решения, но мы о них не знаем (если Вы знаете о них, прошу оставлять комментарии).
Итак, поехали:)
1. Заходим в адресную книгу Outlook
2. Экспортируем выбранную книгу (Файл -> Экспорт -> Другая адресная книга -> Текстовый файл с разделителями-запятыми)
Жмем «Экспорт» и выбираем путь сохранения файла
Жмем «Далее»
ОБЯЗАТЕЛЬНО ОТМЕЧАЕМ ВСЕ ПОЛЯ!
Жмем «Готово»
Скачиваем скрипт, распаковываем и запускаем его передав первым аргументом полный путь до файла который мы экспортировали, в нашем примере он указан как C:AdressBookAB.csv
В директории с адресной книгой появился новый файл AB_new.csv, его мы импортируем в Thunderbird!
В Mozilla Thunderbird жмем в меню «Инструменты>Импорт»
Выбираем «Адресные книги»
В появившемся окне выбираем «Текст. файл (LDIF, .tab, .csv, .txt)», жмем «Далее»
Указываем путь до нашего файла созданным с помощью скрипта, указав в диалоговом окне тип файла — все файлы (т.к. по умолчанию выбирается LDIF), выбрав — жмем «Открыть»
В следующем окне отмечаем чекбоксы так же, как указано на скриншоте (можно указать только те поля которые Вам нужны, ну или все)
Нажимаем «OK» и видим следующее окно с сообщением об успешном импорте
Жмем «Готово», заходим в адресную книгу MozillaThuderbird, у нас появилась новая книга с названием взятым от имени файла импорта AB_new, возможно в начале она будет пустая, просто пощелкайте «туда-сюда» и она обновится, ну или закройте-откройте программу

Ниже публикую сам скрипт convertingAddressBook
# coding=utf-8
from os import path
import sys
outlook = {'sequence':
['firstName', 'lastName', 'middleName', 'displayName', 'alias', 'email', 'streetHome', 'cityHome',
'zipHome', 'regionHome', 'countryHome', 'phoneHome', 'faxHome', 'mobileHome', 'pageHome', 'streetBusiness',
'cityBusiness', 'zipBusiness', 'regionBusiness', 'countryBusiness', 'pageBusiness', 'phoneBusiness',
'faxBusiness', 'pager', 'organization', 'function', 'department', 'room', 'notes'],
'delimiter':';'}
thunderbird = {'sequence':
['firstName', 'lastName', 'displayName', 'alias', 'email', 'emailAlt', 'internetPager', 'phoneBusiness',
'phoneHome', 'faxHome', 'pager', 'mobileHome', 'streetHome', 'streetHomeAlt', 'cityHome', 'regionHome',
'zipHome', 'countryHome', 'streetBusiness', 'streetBusinessAlt', 'cityBusiness', 'regionBusiness',
'zipBusiness', 'countryBusiness', 'function', 'department', 'organization', 'pageBusiness', 'pageBusinessAlt',
'yearBirth', 'monthBirth', 'dayBirth', 'other', 'otherAlt1', 'otherAlt2', 'otherAlt3', 'notes'],
'delimiter':','}
def conversion(fileIN, fileOUT, impFrom=outlook, impTo=thunderbird):
match = set(impFrom['sequence']) & set(impTo['sequence'])
for record in fileIN.readlines():
result=str()
record = record.strip().split(impFrom['delimiter'])
record = {key:value for key, value in zip(impFrom['sequence'], record)}
for key in impTo['sequence']:
if key in match:
result += record.get(key, '')
result += impTo['delimiter']
print('.', sep='', end='')
fileOUT.write('{}n'.format(result))
fileOUT.close()
if __name__ == '__main__':
flag = True
if len(sys.argv) >= 3:
pathIN, pathOUT = sys.argv[1:3]
elif len(sys.argv) == 2:
pathIN = sys.argv[1]
pathOUT = '_new'.join(path.splitext(pathIN))
else:
flag = False
if flag:
fileIN = open(pathIN, 'r')
if pathOUT:
fileOUT = open(pathOUT, 'w')
else:
pathOUT = '_new'.join(path.splitext(pathIN))
fileOUT = open(pathOUT, 'w')
print('Converting', sep='', end='')
conversion(fileIN, fileOUT)
print('OK', sep='', end='n')
input('Press ENTER') Cкрипт должен работать в версии Python 3.X работа во второй ветке Python не проверялась.
Собственно все:)
Ваш скрипт хотел попробовать,распаковал,а там один файл с информацией о коде.Что дальше делать?Если можно,подетальнее,я не силен в программировании
Установить Python3, обработать скриптом файл экспорта, согласно описанию в статье.
Программировать не надо.
Автор ,если ты еще жив, знай — твой скрипт это топчик. Большое спасибо. :)