Si vous avez un dictionnaire Python et que vous souhaitez l’encoder sous forme de chaîne et le compresser pour économiser de l’espace, peut-être pour transmettre un dictionnaire en tant que variable d’environnement ou similaire, vous pouvez procéder comme swimsuit
Fonctions Zip puis Encode / Decode puis Unzip
import json, gzip, base64
from io import BytesIO
def _zip_then_encode(knowledge: dict) -> str:
"""Gzip and base64 encode a dictionary"""
if kind(knowledge) != dict:
elevate TypeError("knowledge should be a dictionary")
compressed = BytesIO()
with gzip.GzipFile(fileobj=compressed, mode="w") as f:
json_response = json.dumps(knowledge)
f.write(json_response.encode("utf-8"))
return base64.b64encode(compressed.getvalue()).decode("ascii")
def _decode_then_unzip(knowledge) -> dict:
res = base64.b64decode(knowledge)
res = gzip.decompress(res)
res = res.decode("utf-8")
res = json.hundreds(res)
return res
Pour utiliser le encode
et decode
fonctions, vous pouvez effectuer les opérations suivantes :
Compressez et encodez le dictionnaire en chaîne
my_dict = {
'somekey': {
'one other': 'worth'
}
}
encoded_str = _zip_then_encode(my_dict)
print(encoded_str)
Sortir:
H4sIAM0O9mMC/6tWKs7PTc1OrVSyUqhWSszLL8lILQKylcoSc0pTlWprAUha5+ghAAAA
Décodez et décompressez la chaîne dans le dictionnaire
Vous pouvez maintenant prendre la chaîne et l’inverser dans le dictionnaire comme swimsuit :
print(_decode_then_unzip(encoded_str))
Sortir:
{'somekey': {'one other': 'worth'}}