По работе часто приходится заниматься импортом в 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, обработать скриптом файл экспорта, согласно описанию в статье.
Программировать не надо.
Автор ,если ты еще жив, знай — твой скрипт это топчик. Большое спасибо. :)