Импорт адресной книги в Mozilla Tunderbird из OutlookExpress

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

Ниже публикую сам скрипт 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 не проверялась.
Собственно все:)

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Комментарии: 3
  1. Роман

    Ваш скрипт хотел попробовать,распаковал,а там один файл с информацией о коде.Что дальше делать?Если можно,подетальнее,я не силен в программировании

    1. Vladimir

      Установить Python3, обработать скриптом файл экспорта, согласно описанию в статье.
      Программировать не надо.

  2. Андрей

    Автор ,если ты еще жив, знай — твой скрипт это топчик. Большое спасибо. :)

Добавить комментарий

:) :D :( :o 8O :? 8) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.