Лучший способ дедупликации моего Thunderbird адресная книга?

Насколько я могу судить, по крайней мере, в контейнере докера можно окончательно apt-get python 3.

Сначала я столкнулся с контейнером ubuntu с контейнером:

docker run -it --rm ubuntu:latest bash

, то по какой-то причине ему нужно было обновить некоторые вещи ubuntu, поэтому я сделал (внутри контейнера):

apt-get update && apt-get install -y build-essential git libjpeg-dev

, а затем я просто установил python3 и, похоже, он автоматически получил python 3.5:

apt-get install python3
apt-get install python3-pip

и проверить, работает ли pip, что-то скачает:

pip3 install tensorflow

все, кажется, отлично работает для меня.

Важное примечание: кажется, что если у вас уже установлен python 3.4, тогда apt-get install python3 не работает, потому что он говорит, что у вас его уже есть. Кажется, это была одна из моих проблем, потому что я начинал с изображения докеров с тензорного потока (в частности gcr.io/tensorflow/tensorflow:latest-devel-py3) и чего-то в этом образе (я предполагаю, что у них уже есть python 3.4, но он может что-то еще) не позволял я обновил свой python, чтобы получить python 3.5.

credit: Я обнаружил это, когда я спросил следующее: https://stackoverflow.com/questions/42122826/can-one -use-python-3-5-in-a-docker-container-out-of-the-the-tensorflow-docker

Примечание: можно также просто установить Anaconda , Для примера докеров можно сделать:

docker pull continuumio/anaconda3
docker run -i -t continuumio/anaconda3 /bin/bash

со своего официального сайта: https://stackoverflow.com/questions/42122826/can-one-use-python-3-5- in-a-docker-container-out-of-the-the-tensorflow-docker

Это решение устанавливает python 3.6, но я уверен, что если вы посмотрите на него, вы можете получить python 3.5 Если это то, что вы хотите.

Примечание: вы, вероятно, должны использовать виртуальную среду, такую ​​как виртуальный env или conda / anaconda, если вы не используете докеры. Просто хотел напомнить людям.

7
задан 6 June 2011 в 18:11

10 ответов

У меня была такая же проблема несколько лет назад, и я написал очень маленький скрипт python для унификации экспорта LDIF в адресной книге Thunderbird:

экспорт адресной книги в формате LDIF, например. abook.ldif run cat abook.ldif | unify_ldif.py > abook_new.ldif import abook_new.ldif еще раз (возможно, переименовать старую адресную книгу раньше)

В настоящее время скрипт соответствует дублирующимся записям на адрес электронной почты и идентичное имя, но это, конечно, можно адаптировать (в функции find_existing_entry). Это работает для вас?

Программа здесь (EDIT: вам нужен пакет python-ldap):

#!/usr/bin/env python import sys from ldif import LDIFParser, LDIFWriter def find_existing_entry(ldif_entries, ldif_entry): for dn, entry in ldif_entries.items(): if 'mail' in ldif_entry and 'mail' in entry: for mail in ldif_entry['mail']: if 'mail' in entry and mail in entry['mail']: return dn if 'cn' in ldif_entry and 'cn' in entry and ldif_entry['cn'][0] in entry['cn']: return dn if 'sn' in ldif_entry and 'sn' in entry and 'givenName' in ldif_entry and 'givenName' in entry and ldif_entry['sn'][0] in entry['sn'] and ldif_entry['givenName'][0] in entry['givenName']: return dn return '' class MyLDIF(LDIFParser): def __init__(self, input, output): LDIFParser.__init__(self, input) self.writer = LDIFWriter(output) self.entries = {} def merge(self, dn, entry): if 'mail' in entry.keys(): if 'mail' in self.entries[dn].keys(): for mail in entry['mail']: if mail not in self.entries[dn]['mail']: self.entries[dn]['mail'].append(mail) else: self.entries[dn]['mail'] = entry['mail'] for key in entry.keys(): if key not in self.entries[dn].keys(): self.entries[dn][key] = entry[key] def handle(self, dn, entry): if dn in self.entries.keys(): self.merge(dn, entry) else: found_dn = find_existing_entry(self.entries, entry) if found_dn != '': self.merge(found_dn, entry) else: self.entries[dn] = entry def output(self): for dn, entry in self.entries.items(): self.writer.unparse(dn, entry) parser = MyLDIF(sys.stdin, sys.stdout) parser.parse() parser.output()
2
ответ дан 25 July 2018 в 21:46
  • 1
    Любопытно, что у меня нет/не могу найти модуль Формат ldif. Пип говорит, что "не мог найти загрузки, удовлетворяющие требование ldif, что нет распределения на все нашли для Формат ldif" – Amanda 14 June 2011 в 22:20
  • 2
    Я считаю, что нужно установить пакет Python-LDAP в пакет! (Я отредактировал мой ответ) – jmuc 14 June 2011 в 22:40
  • 3
    Я пытался установить его с PIP, но это пакета Ubuntu. – Amanda 18 June 2011 в 00:24
  • 4
    Ладно, это начинает работать, но это не как записи с запятыми. Он задыхается от линии, как: 'cn=Last Name, First Name,mail=foo@example.org' я могу изменить Формат ldif, чтобы вывезти нарушителя запятая, но она находит другого. – Amanda 18 June 2011 в 00:25
  • 5
    Это работало в vim, чтобы очистить большинство из них: :%s/cn=\([-'a-z]*\),\s\([a-z]*\),mail/cn=\2 \1,mail/g – Amanda 18 June 2011 в 01:18

у меня была такая же проблема несколько лет назад, и писал очень маленький скрипт на Python, чтобы унифицировать Формат ldif экспорт адресной книги из Thunderbird:

экспорт адресной книги в формат ldif, например, книгу.Формат ldif запустить cat abook.ldif | unify_ldif.py > abook_new.ldif импорт abook_new.Формат ldif снова (может быть, переименование старой адресной книги перед)

скрипт на данный момент матчи дублирующие записи на адрес электронной почты, и идентичное название, но это может конечно быть адаптированы (в функции find_existing_entry). Это работает для вас?

программа здесь (редактировать: вы должны клавиши [F4] пакет):

#!/usr/bin/env python import sys from ldif import LDIFParser, LDIFWriter def find_existing_entry(ldif_entries, ldif_entry): for dn, entry in ldif_entries.items(): if 'mail' in ldif_entry and 'mail' in entry: for mail in ldif_entry['mail']: if 'mail' in entry and mail in entry['mail']: return dn if 'cn' in ldif_entry and 'cn' in entry and ldif_entry['cn'][0] in entry['cn']: return dn if 'sn' in ldif_entry and 'sn' in entry and 'givenName' in ldif_entry and 'givenName' in entry and ldif_entry['sn'][0] in entry['sn'] and ldif_entry['givenName'][0] in entry['givenName']: return dn return '' class MyLDIF(LDIFParser): def __init__(self, input, output): LDIFParser.__init__(self, input) self.writer = LDIFWriter(output) self.entries = {} def merge(self, dn, entry): if 'mail' in entry.keys(): if 'mail' in self.entries[dn].keys(): for mail in entry['mail']: if mail not in self.entries[dn]['mail']: self.entries[dn]['mail'].append(mail) else: self.entries[dn]['mail'] = entry['mail'] for key in entry.keys(): if key not in self.entries[dn].keys(): self.entries[dn][key] = entry[key] def handle(self, dn, entry): if dn in self.entries.keys(): self.merge(dn, entry) else: found_dn = find_existing_entry(self.entries, entry) if found_dn != '': self.merge(found_dn, entry) else: self.entries[dn] = entry def output(self): for dn, entry in self.entries.items(): self.writer.unparse(dn, entry) parser = MyLDIF(sys.stdin, sys.stdout) parser.parse() parser.output()
2
ответ дан 26 July 2018 в 15:53

у меня была такая же проблема несколько лет назад, и писал очень маленький скрипт на Python, чтобы унифицировать Формат ldif экспорт адресной книги из Thunderbird:

экспорт адресной книги в формат ldif, например, книгу.Формат ldif запустить cat abook.ldif | unify_ldif.py > abook_new.ldif импорт abook_new.Формат ldif снова (может быть, переименование старой адресной книги перед)

скрипт на данный момент матчи дублирующие записи на адрес электронной почты, и идентичное название, но это может конечно быть адаптированы (в функции find_existing_entry). Это работает для вас?

программа здесь (редактировать: вы должны клавиши [F4] пакет):

#!/usr/bin/env python import sys from ldif import LDIFParser, LDIFWriter def find_existing_entry(ldif_entries, ldif_entry): for dn, entry in ldif_entries.items(): if 'mail' in ldif_entry and 'mail' in entry: for mail in ldif_entry['mail']: if 'mail' in entry and mail in entry['mail']: return dn if 'cn' in ldif_entry and 'cn' in entry and ldif_entry['cn'][0] in entry['cn']: return dn if 'sn' in ldif_entry and 'sn' in entry and 'givenName' in ldif_entry and 'givenName' in entry and ldif_entry['sn'][0] in entry['sn'] and ldif_entry['givenName'][0] in entry['givenName']: return dn return '' class MyLDIF(LDIFParser): def __init__(self, input, output): LDIFParser.__init__(self, input) self.writer = LDIFWriter(output) self.entries = {} def merge(self, dn, entry): if 'mail' in entry.keys(): if 'mail' in self.entries[dn].keys(): for mail in entry['mail']: if mail not in self.entries[dn]['mail']: self.entries[dn]['mail'].append(mail) else: self.entries[dn]['mail'] = entry['mail'] for key in entry.keys(): if key not in self.entries[dn].keys(): self.entries[dn][key] = entry[key] def handle(self, dn, entry): if dn in self.entries.keys(): self.merge(dn, entry) else: found_dn = find_existing_entry(self.entries, entry) if found_dn != '': self.merge(found_dn, entry) else: self.entries[dn] = entry def output(self): for dn, entry in self.entries.items(): self.writer.unparse(dn, entry) parser = MyLDIF(sys.stdin, sys.stdout) parser.parse() parser.output()
2
ответ дан 26 July 2018 в 16:42

У меня была такая же проблема несколько лет назад, и я написал очень маленький скрипт python для унификации экспорта LDIF в адресной книге Thunderbird:

экспорт адресной книги в формате LDIF, например. abook.ldif run cat abook.ldif | unify_ldif.py > abook_new.ldif import abook_new.ldif еще раз (возможно, переименовать старую адресную книгу раньше)

В настоящее время скрипт соответствует дублирующимся записям на адрес электронной почты и идентичное имя, но это, конечно, можно адаптировать (в функции find_existing_entry). Это работает для вас?

Программа здесь (EDIT: вам нужен пакет python-ldap):

#!/usr/bin/env python import sys from ldif import LDIFParser, LDIFWriter def find_existing_entry(ldif_entries, ldif_entry): for dn, entry in ldif_entries.items(): if 'mail' in ldif_entry and 'mail' in entry: for mail in ldif_entry['mail']: if 'mail' in entry and mail in entry['mail']: return dn if 'cn' in ldif_entry and 'cn' in entry and ldif_entry['cn'][0] in entry['cn']: return dn if 'sn' in ldif_entry and 'sn' in entry and 'givenName' in ldif_entry and 'givenName' in entry and ldif_entry['sn'][0] in entry['sn'] and ldif_entry['givenName'][0] in entry['givenName']: return dn return '' class MyLDIF(LDIFParser): def __init__(self, input, output): LDIFParser.__init__(self, input) self.writer = LDIFWriter(output) self.entries = {} def merge(self, dn, entry): if 'mail' in entry.keys(): if 'mail' in self.entries[dn].keys(): for mail in entry['mail']: if mail not in self.entries[dn]['mail']: self.entries[dn]['mail'].append(mail) else: self.entries[dn]['mail'] = entry['mail'] for key in entry.keys(): if key not in self.entries[dn].keys(): self.entries[dn][key] = entry[key] def handle(self, dn, entry): if dn in self.entries.keys(): self.merge(dn, entry) else: found_dn = find_existing_entry(self.entries, entry) if found_dn != '': self.merge(found_dn, entry) else: self.entries[dn] = entry def output(self): for dn, entry in self.entries.items(): self.writer.unparse(dn, entry) parser = MyLDIF(sys.stdin, sys.stdout) parser.parse() parser.output()
2
ответ дан 31 July 2018 в 11:15

у меня была такая же проблема несколько лет назад, и писал очень маленький скрипт на Python, чтобы унифицировать Формат ldif экспорт адресной книги из Thunderbird:

экспорт адресной книги в формат ldif, например, книгу.Формат ldif запустить cat abook.ldif | unify_ldif.py > abook_new.ldif импорт abook_new.Формат ldif снова (может быть, переименование старой адресной книги перед)

скрипт на данный момент матчи дублирующие записи на адрес электронной почты, и идентичное название, но это может конечно быть адаптированы (в функции find_existing_entry). Это работает для вас?

программа здесь (редактировать: вы должны клавиши [F4] пакет):

#!/usr/bin/env python import sys from ldif import LDIFParser, LDIFWriter def find_existing_entry(ldif_entries, ldif_entry): for dn, entry in ldif_entries.items(): if 'mail' in ldif_entry and 'mail' in entry: for mail in ldif_entry['mail']: if 'mail' in entry and mail in entry['mail']: return dn if 'cn' in ldif_entry and 'cn' in entry and ldif_entry['cn'][0] in entry['cn']: return dn if 'sn' in ldif_entry and 'sn' in entry and 'givenName' in ldif_entry and 'givenName' in entry and ldif_entry['sn'][0] in entry['sn'] and ldif_entry['givenName'][0] in entry['givenName']: return dn return '' class MyLDIF(LDIFParser): def __init__(self, input, output): LDIFParser.__init__(self, input) self.writer = LDIFWriter(output) self.entries = {} def merge(self, dn, entry): if 'mail' in entry.keys(): if 'mail' in self.entries[dn].keys(): for mail in entry['mail']: if mail not in self.entries[dn]['mail']: self.entries[dn]['mail'].append(mail) else: self.entries[dn]['mail'] = entry['mail'] for key in entry.keys(): if key not in self.entries[dn].keys(): self.entries[dn][key] = entry[key] def handle(self, dn, entry): if dn in self.entries.keys(): self.merge(dn, entry) else: found_dn = find_existing_entry(self.entries, entry) if found_dn != '': self.merge(found_dn, entry) else: self.entries[dn] = entry def output(self): for dn, entry in self.entries.items(): self.writer.unparse(dn, entry) parser = MyLDIF(sys.stdin, sys.stdout) parser.parse() parser.output()
2
ответ дан 31 July 2018 в 12:16

у меня была такая же проблема несколько лет назад, и писал очень маленький скрипт на Python, чтобы унифицировать Формат ldif экспорт адресной книги из Thunderbird:

экспорт адресной книги в формат ldif, например, книгу.Формат ldif запустить cat abook.ldif | unify_ldif.py > abook_new.ldif импорт abook_new.Формат ldif снова (может быть, переименование старой адресной книги перед)

скрипт на данный момент матчи дублирующие записи на адрес электронной почты, и идентичное название, но это может конечно быть адаптированы (в функции find_existing_entry). Это работает для вас?

программа здесь (редактировать: вы должны клавиши [F4] пакет):

#!/usr/bin/env python import sys from ldif import LDIFParser, LDIFWriter def find_existing_entry(ldif_entries, ldif_entry): for dn, entry in ldif_entries.items(): if 'mail' in ldif_entry and 'mail' in entry: for mail in ldif_entry['mail']: if 'mail' in entry and mail in entry['mail']: return dn if 'cn' in ldif_entry and 'cn' in entry and ldif_entry['cn'][0] in entry['cn']: return dn if 'sn' in ldif_entry and 'sn' in entry and 'givenName' in ldif_entry and 'givenName' in entry and ldif_entry['sn'][0] in entry['sn'] and ldif_entry['givenName'][0] in entry['givenName']: return dn return '' class MyLDIF(LDIFParser): def __init__(self, input, output): LDIFParser.__init__(self, input) self.writer = LDIFWriter(output) self.entries = {} def merge(self, dn, entry): if 'mail' in entry.keys(): if 'mail' in self.entries[dn].keys(): for mail in entry['mail']: if mail not in self.entries[dn]['mail']: self.entries[dn]['mail'].append(mail) else: self.entries[dn]['mail'] = entry['mail'] for key in entry.keys(): if key not in self.entries[dn].keys(): self.entries[dn][key] = entry[key] def handle(self, dn, entry): if dn in self.entries.keys(): self.merge(dn, entry) else: found_dn = find_existing_entry(self.entries, entry) if found_dn != '': self.merge(found_dn, entry) else: self.entries[dn] = entry def output(self): for dn, entry in self.entries.items(): self.writer.unparse(dn, entry) parser = MyLDIF(sys.stdin, sys.stdout) parser.parse() parser.output()
2
ответ дан 2 August 2018 в 03:22

У меня была такая же проблема несколько лет назад, и я написал очень маленький скрипт python для унификации экспорта LDIF в адресной книге Thunderbird:

экспорт адресной книги в формате LDIF, например. abook.ldif run cat abook.ldif | unify_ldif.py > abook_new.ldif import abook_new.ldif еще раз (возможно, переименовать старую адресную книгу раньше)

В настоящее время скрипт соответствует дублирующимся записям на адрес электронной почты и идентичное имя, но это, конечно, можно адаптировать (в функции find_existing_entry). Это работает для вас?

Программа здесь (EDIT: вам нужен пакет python-ldap):

#!/usr/bin/env python import sys from ldif import LDIFParser, LDIFWriter def find_existing_entry(ldif_entries, ldif_entry): for dn, entry in ldif_entries.items(): if 'mail' in ldif_entry and 'mail' in entry: for mail in ldif_entry['mail']: if 'mail' in entry and mail in entry['mail']: return dn if 'cn' in ldif_entry and 'cn' in entry and ldif_entry['cn'][0] in entry['cn']: return dn if 'sn' in ldif_entry and 'sn' in entry and 'givenName' in ldif_entry and 'givenName' in entry and ldif_entry['sn'][0] in entry['sn'] and ldif_entry['givenName'][0] in entry['givenName']: return dn return '' class MyLDIF(LDIFParser): def __init__(self, input, output): LDIFParser.__init__(self, input) self.writer = LDIFWriter(output) self.entries = {} def merge(self, dn, entry): if 'mail' in entry.keys(): if 'mail' in self.entries[dn].keys(): for mail in entry['mail']: if mail not in self.entries[dn]['mail']: self.entries[dn]['mail'].append(mail) else: self.entries[dn]['mail'] = entry['mail'] for key in entry.keys(): if key not in self.entries[dn].keys(): self.entries[dn][key] = entry[key] def handle(self, dn, entry): if dn in self.entries.keys(): self.merge(dn, entry) else: found_dn = find_existing_entry(self.entries, entry) if found_dn != '': self.merge(found_dn, entry) else: self.entries[dn] = entry def output(self): for dn, entry in self.entries.items(): self.writer.unparse(dn, entry) parser = MyLDIF(sys.stdin, sys.stdout) parser.parse() parser.output()
2
ответ дан 4 August 2018 в 19:19

у меня была такая же проблема несколько лет назад, и писал очень маленький скрипт на Python, чтобы унифицировать Формат ldif экспорт адресной книги из Thunderbird:

экспорт адресной книги в формат ldif, например, книгу.Формат ldif запустить cat abook.ldif | unify_ldif.py > abook_new.ldif импорт abook_new.Формат ldif снова (может быть, переименование старой адресной книги перед)

скрипт на данный момент матчи дублирующие записи на адрес электронной почты, и идентичное название, но это может конечно быть адаптированы (в функции find_existing_entry). Это работает для вас?

программа здесь (редактировать: вы должны клавиши [F4] пакет):

#!/usr/bin/env python import sys from ldif import LDIFParser, LDIFWriter def find_existing_entry(ldif_entries, ldif_entry): for dn, entry in ldif_entries.items(): if 'mail' in ldif_entry and 'mail' in entry: for mail in ldif_entry['mail']: if 'mail' in entry and mail in entry['mail']: return dn if 'cn' in ldif_entry and 'cn' in entry and ldif_entry['cn'][0] in entry['cn']: return dn if 'sn' in ldif_entry and 'sn' in entry and 'givenName' in ldif_entry and 'givenName' in entry and ldif_entry['sn'][0] in entry['sn'] and ldif_entry['givenName'][0] in entry['givenName']: return dn return '' class MyLDIF(LDIFParser): def __init__(self, input, output): LDIFParser.__init__(self, input) self.writer = LDIFWriter(output) self.entries = {} def merge(self, dn, entry): if 'mail' in entry.keys(): if 'mail' in self.entries[dn].keys(): for mail in entry['mail']: if mail not in self.entries[dn]['mail']: self.entries[dn]['mail'].append(mail) else: self.entries[dn]['mail'] = entry['mail'] for key in entry.keys(): if key not in self.entries[dn].keys(): self.entries[dn][key] = entry[key] def handle(self, dn, entry): if dn in self.entries.keys(): self.merge(dn, entry) else: found_dn = find_existing_entry(self.entries, entry) if found_dn != '': self.merge(found_dn, entry) else: self.entries[dn] = entry def output(self): for dn, entry in self.entries.items(): self.writer.unparse(dn, entry) parser = MyLDIF(sys.stdin, sys.stdout) parser.parse() parser.output()
2
ответ дан 6 August 2018 в 03:32

У меня была та же проблема несколько лет назад, и я написал очень маленький скрипт python для унификации экспорта LDIF в адресной книге Thunderbird:

  1. адресной книги экспорта в формате LDIF, например. abook.ldif
  2. run cat abook.ldif | unify_ldif.py & gt; abook_new.ldif
  3. import abook_new.ldif снова (возможно, переименовать старую адресную книгу до)

В настоящее время скрипт соответствует дублирующимся записям на адрес электронной почты и идентичное имя, но это, конечно, можно адаптировать (в функции find_existing_entry ). Это работает для вас?

Программа здесь (EDIT: вам нужен пакет python-ldap ):

  #! / Usr  / bin / env python import sys из ldif import LDIFParser, LDIFWriter def find_existing_entry (ldif_entries, ldif_entry): для dn, запись в ldif_entries.items (): if 'mail' в ldif_entry и 'mail' в записи: для почты в ldif_entry [  'mail']: если «mail» в записи и входе в записи ['mail']: return dn, если 'cn' в ldif_entry и 'cn' в записи и ldif_entry ['cn'] [0] в записи ['cn  ']: return dn, если' sn 'в ldif_entry и' sn 'в записи и' givenName 'в ldif_entry и' givenName 'в записи и ldif_entry [' sn '] [0] в записи [' sn '] и ldif_entry ['  givenName '] [0] в записи [' givenName ']: return dn return' 'class MyLDIF (LDIFParser): def __init __ (self, input, output): LDIFParser .__ init __ (self, input) self.writer = LDIFWriter (вывод  ) self.entries = {} def merge (self, dn, entry): if 'mail' в entry.keys (): if 'mail' в self.entries [dn] .keys (): для ввода почты в [  mail ']: если почта не в self.e  ntries [dn] ['mail']: self.entries [dn] ['mail']. append (mail) else: self.entries [dn] ['mail'] = запись ['mail'] для ввода ключа  .keys (): если ключ не в self.entries [dn] .keys (): self.entries [dn] [key] = entry [key] def handle (self, dn, entry): если dn in self.entries  .keys (): self.merge (dn, entry) else: found_dn = find_existing_entry (self.entries, entry), если found_dn! = '': self.merge (found_dn, entry) else: self.entries [dn] = entry  def output (self): для dn, запись в self.entries.items (): self.writer.unparse (dn, entry) parser = MyLDIF (sys.stdin, sys.stdout) parser.parse () parser.output (  )  
2
ответ дан 7 August 2018 в 21:20

У меня была та же проблема несколько лет назад, и я написал очень маленький скрипт python для унификации экспорта LDIF в адресной книге Thunderbird:

  1. адресной книги экспорта в формате LDIF, например. abook.ldif
  2. run cat abook.ldif | unify_ldif.py & gt; abook_new.ldif
  3. import abook_new.ldif снова (возможно, переименовать старую адресную книгу до)

В настоящее время скрипт соответствует дублирующимся записям на адрес электронной почты и идентичное имя, но это, конечно, можно адаптировать (в функции find_existing_entry ). Это работает для вас?

Программа здесь (EDIT: вам нужен пакет python-ldap ):

  #! / Usr  / bin / env python import sys из ldif import LDIFParser, LDIFWriter def find_existing_entry (ldif_entries, ldif_entry): для dn, запись в ldif_entries.items (): if 'mail' в ldif_entry и 'mail' в записи: для почты в ldif_entry [  'mail']: если «mail» в записи и входе в записи ['mail']: return dn, если 'cn' в ldif_entry и 'cn' в записи и ldif_entry ['cn'] [0] в записи ['cn  ']: return dn, если' sn 'в ldif_entry и' sn 'в записи и' givenName 'в ldif_entry и' givenName 'в записи и ldif_entry [' sn '] [0] в записи [' sn '] и ldif_entry ['  givenName '] [0] в записи [' givenName ']: return dn return' 'class MyLDIF (LDIFParser): def __init __ (self, input, output): LDIFParser .__ init __ (self, input) self.writer = LDIFWriter (вывод  ) self.entries = {} def merge (self, dn, entry): if 'mail' в entry.keys (): if 'mail' в self.entries [dn] .keys (): для ввода почты в [  mail ']: если почта не в self.e  ntries [dn] ['mail']: self.entries [dn] ['mail']. append (mail) else: self.entries [dn] ['mail'] = запись ['mail'] для ввода ключа  .keys (): если ключ не в self.entries [dn] .keys (): self.entries [dn] [key] = entry [key] def handle (self, dn, entry): если dn in self.entries  .keys (): self.merge (dn, entry) else: found_dn = find_existing_entry (self.entries, entry), если found_dn! = '': self.merge (found_dn, entry) else: self.entries [dn] = entry  def output (self): для dn, запись в self.entries.items (): self.writer.unparse (dn, entry) parser = MyLDIF (sys.stdin, sys.stdout) parser.parse () parser.output (  )  
2
ответ дан 13 August 2018 в 15:49
  • 1
    Любопытно, что у меня нет / не могу найти модуль ldif. Pip говорит: «Не удалось найти загрузки, удовлетворяющие требованию ldif. Никаких дистрибутивов, найденных для ldif & quot; – Amanda 14 June 2011 в 22:20
  • 2
    Я думаю, вам нужно установить пакет python-ldap! (Я отредактировал мой ответ) – jmuc 14 June 2011 в 22:40
  • 3
    Я пытался установить его с помощью pip, но это пакет Ubuntu. – Amanda 18 June 2011 в 00:24
  • 4
    Хорошо, это начинает работать, но это не похоже на записи с запятыми. Он задыхается от строк, таких как: 'cn = Last Name, First Name, mail = foo @ example.org' Я могу отредактировать LDIF, чтобы вытащить запятую, но находит другое. – Amanda 18 June 2011 в 00:25
  • 5
    Это работало в vim, чтобы очистить большинство из них: :% s / cn = \ ([- 'az] * \), \ s \ ([az] * \), mail / cn = \ 2 \ 1 , почта / г – Amanda 18 June 2011 в 01:18

Другие вопросы по тегам:

Похожие вопросы: