Для меня это выглядит как LDIF файл. Библиотека python-ldap имеет библиотеку обработки чистого LDIF-языка Python, которая может помочь, если в вашем файле есть некоторые неприятные ошибки, возможные в LDIF, например. Значения в кодировке Base64, сворачивание записей и т. Д.
Вы можете использовать это так:
import csv
import ldif
class ParseRecords(ldif.LDIFParser):
def __init__(self, csv_writer):
self.csv_writer = csv_writer
def handle(self, dn, entry):
self.csv_writer.writerow([entry['LoginId'], entry['mail']])
with open('/path/to/large_file') as input, with open('output_file', 'wb') as output:
csv_writer = csv.writer(output)
csv_writer.writerow(['LoginId', 'Mail'])
ParseRecords(input, csv_writer).parse()
Редактировать
Таким образом, чтобы извлечь из действующего каталога LDAP, используя библиотеку python-ldap , вы захотите сделать что-то вроде этого:
import csv
import ldap
con = ldap.initialize('ldap://server.fqdn.system.edu')
# if you're LDAP directory requires authentication
# con.bind_s(username, password)
try:
with open('output_file', 'wb') as output:
csv_writer = csv.writer(output)
csv_writer.writerow(['LoginId', 'Mail'])
for dn, attrs in con.search_s('ou=Students,o=system.edu,o=system', ldap.SCOPE_SUBTREE, attrlist = ['LoginId','mail']:
csv_writer.writerow([attrs['LoginId'], attrs['mail']])
finally:
# even if you don't have credentials, it's usually good to unbind
con.unbind_s()
Вероятно, стоит прочитать документацию для модуля ldap , особенно пример .
Обратите внимание, что в приведенном выше примере я полностью пропустил поставку фильтра, который вы, вероятно, захотите сделать в производстве. Фильтр в LDAP аналогичен предложению WHERE
в выражении SQL; он ограничивает возвращаемые объекты. У Microsoft действительно есть хорошее руководство по фильтрам LDAP . Каноническая ссылка для фильтров LDAP: RFC 4515 .
Точно так же, если существует потенциально несколько тысяч записей даже после применения соответствующего фильтра, вам, возможно, придется взглянуть на элемент управления пейджингом LDAP , хотя его использование снова усложнит пример. Надеюсь, этого достаточно, чтобы вы начали, но если что-то появится, не стесняйтесь задавать или открывать новый вопрос.
Удачи.