python - 字节到字符串到字节。 python 3

标签 python python-3.x pickle

这是一个简单的问题,但我似乎无法弄清楚。我想获取从 pickle.dumps() 输出的字节并将其转换为 str 并能够将其转换回与 bytes 兼容的格式pickle.loads(string_thing) 可以恢复原始对象。

encoded = pickle.dumps(None)
string_encoded = to_string(encoded)
decoded = pickle.loads(safe_decoder(string_encoded))

我知道反对意见之一是“你为什么需要这样做?”对允许类型的限制。

最佳答案

@deceze 给出了一个好主意:使用模块 base64 及其函数 .b64encode().b64decode()

这是一个例子:

>>> 'Álñó@'
'Álñó@'
>>> 'Álñó@'.encode()
b'\xc3\x81l\xc3\xb1\xc3\xb3@'
>>> base64.b64encode('Álñó@'.encode())
b'w4Fsw7HDs0A='
>>> base64.b64encode('Álñó@'.encode()).decode()
'w4Fsw7HDs0A='

现在你有了一个 base64 格式的字符串。对于相反的过程:

>>> base64.b64encode('Álñó@'.encode()).decode().encode()
b'w4Fsw7HDs0A='
>>> base64.b64decode(base64.b64encode('Álñó@'.encode()).decode().encode())
b'\xc3\x81l\xc3\xb1\xc3\xb3@'
>>> base64.b64decode(base64.b64encode('Álñó@'.encode()).decode().encode()).decode()
'Álñó@'

这对你有用吗?

<小时/>

使用pickle的示例:

>>> original_obj = 456.5
>>> original_obj
456.5
>>> type(original_obj)
<class 'float'>
>>> intermediate_str = base64.b64encode(pickle.dumps(original_obj)).decode()
>>> intermediate_str
'gANHQHyIAAAAAAAu'

>>> new_obj = pickle.loads(base64.b64decode(intermediate_str.encode()))
>>> new_obj
456.5
>>> type(new_obj)
<class 'float'>

>>> original_obj == new_obj
True

关于python - 字节到字符串到字节。 python 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56378618/

相关文章:

python-3.x - 排序数组和未排序数组时间复杂度之间的差异

python - pickle UnicodeDecodeError

python - `pickle` : yet another `ImportError: No module named my_module`

python-3.x - 如何在 azure 机器学习工作室中保存和访问 pickle/hdf5 文件

python - 有人可以告诉我这个 python 2.7 脚本的程序流程吗?

python - 在 Pandas 中添加日期

python - 使用 selenium chrome 驱动时自动丢失元素 'Save as PDF'

python - 如何使用 Homebrew 升级到特定的 Python 版本?

python : generating random numbers from a power law distribution

python-3.x - 为什么 'reset_index(drop=True)' 函数会意外删除列?