我很难将具有成千上万个条目的LDIF文件拆分为多个词典。例如,我的LDIF文件如下:
dn: value
ou: value
objectClass: value
entryUUID: value
creatorname: value
entryNNN: value
modifierName: value
modifyTimestamp: value
dn: value
ou: value
…
…
…
我想做的是以“ dn:”开头的单独行,并将下面的每一行分成单独的词典。例如:
ldap_core_record_1 = {'dn:': 'value', 'ou:': 'value',...}
ldap_core_record_2 = {'dn:': 'value', 'ou:': 'value',...}
这是我到目前为止的代码:
def parse_LDAP_Core_Schema():
LDAP_CORE_LIST = []
LDAP_CORE_DICT = {}
LDAP_CORE_FILE = '/…/…/…/…/ldap_core_backup.ldif' """This is the LDAP generated from slapcat"""
with open(LDAP_CORE_FILE, 'r') as LDAP_CORE_OBJECT:
LDAP_CORE_LIST = LDAP_CORE_OBJECT.readlines()
for line in LDAP_CORE_LIST:
if line.startswith("dn: "):
从那里,我很困惑。我不知道如何正确拼接列表,因为我仅使用Python了很短的时间。不幸的是,我正在使用Python 3.4.2。
答案 0 :(得分:0)
沿这条线。
def parse_LDAP_Core_Schema():
LDAP_CORE_FILE = '/…/…/…/…/ldap_core_backup.ldif' """This is the LDAP generated from slapcat"""
results = []
with open(LDAP_CORE_FILE, 'r') as LDAP_CORE_OBJECT:
results = []
for line in LDAP_CORE_OBJECT:
key, value = line.strip().split(': ')
if key == 'dn': # add new element to list
results.append({'dn': value})
else: # add new key: value to latest element of list
results[-1][key] = value
return results
答案 1 :(得分:0)
这将为您提供所需的输出:
file_path = '/…/…/…/…/ldap_core_backup.ldif'
with open(file_path) as file:
records = []
for line in file.readlines():
line = line.replace('\n', '')
if not line: # skip empty lines
continue
key, value = line.split(': ')
if key == 'dn':
records.append({key: value})
else:
records[-1][key] = value
print(records)
>>> [{'dn': 'value', 'ou': 'value', 'objectClass': 'value', 'entryUUID': 'value', 'creatorname': 'value', 'entryNNN': 'value', 'modifierName': 'value', 'modifyTimestamp': 'value'}, {'dn': 'value', 'ou': 'value'}]
答案 2 :(得分:0)
您非常亲密!只需使用临时LDAP_CORE_LIST
的结果填充您的LDAP_CORE_DICT
。
def parse_LDAP_Core_Schema():
LDAP_CORE_LIST = []
LDAP_CORE_DICT = {}
LDAP_CORE_FILE = '/…/…/…/…/ldap_core_backup.ldif' # LDAP generated from slapcat
with open(LDAP_CORE_FILE, 'r') as LDAP_CORE_OBJECT:
LDAP_CORE_LIST = LDAP_CORE_OBJECT.readlines()
for line in LDAP_CORE_LIST:
if line.startswith("dn: "): # If new DN
if LDAP_CORE_DICT: # Push current dict into list
LDAP_CORE_LIST.append(LDAP_CORE_DICT)
k, v = line.split(":", maxsplit=1) # Split line at first colon
LDAP_CORE_DICT = {k: v.strip()} # Create object with first value
else: # Not a new DN line
try:
k, v = line.split(":", maxsplit=1) # Split line at first colon
LDAP_CORE_DICT[k] = v.strip() # Update object
except ValueError: # Ignore blank and malformatted lines
pass
else: # After completing the loops, push final dict into list
if LDAP_CORE_DICT: # Push current dict into list
LDAP_CORE_LIST.append(LDAP_CORE_DICT)
print(LDAP_CORE_LIST) # [{'dn': 'value1', 'ou': 'value2', ...}, ...]
return LDAP_CORE_LIST