Python base64 编码列表

PDP*_*PDP 1 python base64 encoding decoding

在 Python 中编码对我来说是新的,我正在努力理解它。如果这已经被问到并已经回答了,我们深表歉意。

我正在尝试对 Python 列表进行编码并对其进行解码。当我尝试直接对列表进行编码时,遇到如下错误。

>>> my_list = [1, 2, 3]
>>> encoded_list = base64.b64encode(my_list)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/base64.py", line 54, in b64encode
    encoded = binascii.b2a_base64(s)[:-1]
TypeError: b2a_base64() argument 1 must be string or buffer, not list
Run Code Online (Sandbox Code Playgroud)

为了修复它,我将列表对象转换为字符串并将其传递给 encode 函数,并且我能够成功对其进行编码。

>>> encoded_list = base64.b64encode(str(my_list))
>>> encoded_list
'WzEsIDIsIDNd'
Run Code Online (Sandbox Code Playgroud)

当我尝试解码它时,我得到一个解码后的字符串,如下所示。

>>> decoded_list = base64.b64decode(encoded_list)
>>> decoded_list
'[1, 2, 3]'
>>> type(decoded_list)
<type 'str'>
Run Code Online (Sandbox Code Playgroud)

但是我的初衷是对列表进行编码和解码,而不是将列表转换为字符串,然后将字符串转换为列表。

很确定这不是对 dict 或列表等对象进行编码的正确方法。如果是这种情况,有人可以启发我如何在 Python 中编码/解码非字符串对象吗?

非常感谢。

SCB*_*SCB 5

尝试使用 JSON 而不是字符串进行编码/解码。

import json
import base64

my_list = [1, 2, 3]
json_encoded_list = json.dumps(my_list)
#: '[1, 2, 3]'
b64_encoded_list = base64.b64encode(json_encoded_list)
#: 'WzEsIDIsIDNd'
decoded_list = base64.b64decode(b64_encoded_list)
#: '[1, 2, 3]'
my_list_again = json.loads(decoded_list)
#: [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

但实际上,出于几乎任何存储原因,我认为没有真正的理由对您的 json 输出进行 base64 编码。只需编码和解码为json。

my_list = [1, 2, 3]
json_encoded_list = json.dumps(my_list)
#: '[1, 2, 3]'
my_list_again = json.loads(json_encoded_list)
#: [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

如果您需要比数组和字典更复杂的东西,那么可能会使用 7stud 的 pickle 方法。然而,JSON 简单、可读、广泛支持并且与其他语言交叉兼容。我会尽可能选择它。