从嵌入在列表中的元组中提取字符串,Python 3

时间:2014-11-07 16:20:28

标签: python string python-3.x tuples dataformat

如果已经提出这个问题,请提前道歉,做了一些搜索,但没有运气。

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]

...所以我可以在另一个比较部门的函数中使用它,如果条件不满足则返回名称。

2 个答案:

答案 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]