如果已经提出这个问题,请提前道歉,做了一些搜索,但没有运气。
TL; DR:试图将第二个元组拉出来作为一个字符串。
我正在使用python3构建一个脚本,该脚本从LDAP中提取信息并返回有希望可操作的数据。
def GetMembersWDept():
i2 = input('Please input the department number. Examples: 2410, 2417\n')
criteria = '(&(objectClass=User)(department=' + i2 + '*))'
print ('Search criteria set to: \t\t' + criteria)
searchDC = 'dc=example,dc=com'
print ('Searching location: \t\t\t' + searchDC)
print ()
out = []
result = c.search(searchDC, criteria, \
SEARCH_SCOPE_WHOLE_SUBTREE, attributes = ['department']) \
# request a few object from the ldap server
if result:
for r in c.response:
if (r['type'] == 'searchResEntry'):
out.append(r['dn'])
out.append(r['attributes']) # comes out in tuple form
else:
pass
else:
print('result', conn.result)
return out
这适用于拉出该部门成员的CN,但不能用于提取任何其他信息,在这种情况下会附加部门。
示例输出为:
搜索条件设置为:(&(objectClass = User)(department = 2417 *)) 搜索位置:dc = ple,dc = com
[' CN = First Last,OU = ex,OU = am,DC = ple,DC = com',{' department':[' 1234&#39 ]}, ' CN =另一个人,OU = ex,OU = am,DC = ple,DC = com',{' department': [' 1234']}]
如何将元组的第二部分(即' 1234')作为字符串取出?这里的最后阶段是将数据格式化为:
[First Last,1234,Another Person,1234]
...所以我可以在另一个比较部门的函数中使用它,如果条件不满足则返回名称。
答案 0 :(得分:2)
如果输出为:
['CN=First Last,OU=ex,OU=am,DC=ple,DC=com', {'department': ['1234']}, 'CN=Another Person,OU=ex,OU=am,DC=ple,DC=com', {'department': ['1234']}]
然后你可以设置等于newresult
并执行:
print(list(newresult[1].values())[0][0])
这假设列表中包含部门的元素始终位于位置1,字典始终具有1个值,并且所需的部门编号是列表中唯一的项目。
答案 1 :(得分:0)
恕我直言,使用c.search_s
而不是c.search
会更简单,除非你有充分的理由这样做(或者你应该展示如何创建你的回复)。
来自python-ldap文档:
search_s
直接返回2元组(dn,attrs)的列表,其中dn是包含条目的DN(可分辨名称)的字符串,而attrs是包含与条目关联的属性的字典。 attrs的键是字符串,相关的值是字符串列表
因此,对于每个元组entry
,您有:
dn = entry[0]
departement = entry[1]{'department'}[0]