簡體   English   中英

在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']
}

我們需要將此輸出轉換為字典中的簡單字符串、鍵值對。 我想將此實現為一個簡單的函數,可以調用該函數並一次轉換字典中的所有值。 不幸的是,一些 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM