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 中编码/解码非字符串对象吗?
非常感谢。
尝试使用 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 简单、可读、广泛支持并且与其他语言交叉兼容。我会尽可能选择它。
| 归档时间: |
|
| 查看次数: |
8775 次 |
| 最近记录: |