Долгое время я для работы с адресной книжкой в формате vcard пользоватлся самописным питоновским (Python2 only) скриптом. Который использовал свой собственный vcard-parser (зато понимат vcard2.0, как его генерят старые кнопочные телефоны), не умел объединять контакты и все такое прочее.
Потом, с появлением radicale и vdirsyncer перешел на
khard, который использует модуль vobject. Выяснилось, правда, что унаследованные еще от Ericsson R320 контакты из записной книжки в нем обрабатываются не очень хорошо, но это вопрос однократного преобразования формата.
Что там приятно - в ряде операций где нужно выбрать один контакт, а заданный поисковый критерий возвращает несколько, удобно сделано меню выбора нужного.
Удобно редактировать контакт в виде развесистого yaml файла с кучей подсказок.
Что неудобно
1. Полное отстуствие средств работы с фото. (кстати,
патчик на гитхабе давно висит.
2. Отсутствие экспорта в формате vcard. То есть отредактировать исходную vcard можно, а выдать на stdout нельзя. Зато можно имя файла получить.
3. Отсутствие импорта. Нельзя повесить khard в качестве mailcap-обработчика на text/x-vcard с тем чтобы приложенные к письмам подиписи импортировать в записную книжку или то же самое сделать с переданными по блютус с чьего-то телефона визитными карточками.
4. Недопортировано на python3. Ошибки вида TypeError: __str__ returns bytes object периодически вылетают.
Впрочем не буду кидать в автора камень. У самого в ctypescrypto с этим сложности.
5. Не умеет работать с внешними адресными книгами. Ладно, черт с ним, я согласен прописать в конфиг.
Но нужно тогда добавить возможность по умолчанию не искать по некоторым книгам. Хотя я бы предпочел возможность просто указать в командной строке имя файла/директории
Вот думаю - то ли пофиксить и заслать pull-реквест, то ли свой скрипт починить.
У моего скрипта было еще то преимущество, что он работал с записной книжкой в одном файле, а не по файлику на контакт. А именно такую книжку умеет читать claws-mail. Впрочем vdirsyncer одно в другое легко преобразует.