在 python 3.8 中将带字节的 Python 字典转换为字符串

transform Python dictionary with bytes to string in python 3.8

我希望人们能帮助我。对于任何语法错误,我提前道歉。我正在将 LDAP 数据大规模移植到 MYSQL 数据库。来自 python 程序的 LDAP 转储是我“继承”的。出于性能和维护原因,我们将数据从 LDAP 移出并移入使用 MySQL 作为后端的 Web 身份验证系统。出于商业原因,LDAP 到 webauth 的迁移将在明年进行——因此我需要使两个系统保持同步。

使用 python 2 多年 --- python 3 中的 Unicode / UTF-8 是一个让我很痛苦的领域。

ldap 转储在执行过程中产生以下输出

{'sn': [b'Jones'], 'title': [b'WH Trainee'], 'givenName': [b'Example'], 'distinguishedName': [b'CN=Example Jones,OU=Warehouse Trainees,OU=GU,DC=jupiter,DC=somecorp,DC=org'], 'whenCreated': [b'20201027121144.0Z'], 'department': [b'WHSE'], 'sAMAccountName': [b'ejones'], 'manager': [b'CN=Bobby Smith,OU=WHSE,OU=GU,DC=jupiter,DC=somecorp,DC=org']}

格式化以便于阅读: ** 现有输出**

{
'sn': [b'Jones'], 
'title': [b'WH Trainee'], 
'givenName': [b'Example'], 
'distinguishedName': [b'CN=Example Jones,OU=Warehouse Trainees,OU=GU,DC=jupiter,DC=somecorp,DC=org'], 
'whenCreated': [b'20061027132244.0Z'], 
'department': [b'WHSE'], 
'sAMAccountName': [b'ejones'], 
'manager': [b'CN=Bobby Smith,OU=WHSE,OU=GU,DC=jupiter,DC=somecorp,DC=org']
}

我们需要将此输出转换为字典中的简单字符串、键值对。我想把它实现为一个简单的函数,可以调用它并一次转换字典中的 all 值。不幸的是,一些 ldap 记录缺少部门和经理等内容,因此字典中键和值的数量会有所不同。我需要一种方法将 dict 中的字节值转换为纯 ascii 字符串。

使用单个函数调用的所需转换 像 transformdict(dictname)

这样的东西

期望输出

{
'sn': 'Jones', 
'title': 'WH Trainee', 
'givenName': 'Example', 
'distinguishedName': 'CN=Example Jones,OU=Warehouse Trainees,OU=GU,DC=jupiter,DC=somecorp,DC=org', 
'whenCreated': '20061027132244.0Z', 
'department': 'WHSE', 
'sAMAccountName': 'ejones', 
'manager': 'CN=Bobby Smith,OU=WHSE,OU=GU,DC=jupiter,DC=somecorp,DC=org'
}

我们使用 python 3.8 环境。

有什么建议吗?

应该这样做:

S = {'sn': [b'Jones'], 'title': [b'WH Trainee'], 'givenName': [b'Example'], 'distinguishedName': [b'CN=Example Jones,OU=Warehouse Trainees,OU=GU,DC=jupiter,DC=somecorp,DC=org'], 'whenCreated': [b'20201027121144.0Z'], 'department': [b'WHSE'], 'sAMAccountName': [b'ejones'], 'manager': [b'CN=Bobby Smith,OU=WHSE,OU=GU,DC=jupiter,DC=somecorp,DC=org']}

dt = {key: value[0].decode("utf-8") for key, value in S.items()}
print(dt)

输出:

{
    "sn": "Jones",
    "title": "WH Trainee",
    "givenName": "Example",
    "distinguishedName": "CN=Example Jones,OU=Warehouse Trainees,OU=GU,DC=jupiter,DC=somecorp,DC=org",
    "whenCreated": "20201027121144.0Z",
    "department": "WHSE",
    "sAMAccountName": "ejones",
    "manager": "CN=Bobby Smith,OU=WHSE,OU=GU,DC=jupiter,DC=somecorp,DC=org"
  }