[英]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']
}
我们需要将此输出转换为字典中的简单字符串、键值对。 我想将此实现为一个简单的函数,可以调用该函数并一次转换字典中的所有值。 不幸的是,一些 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"
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.