繁体   English   中英

将 pickle.dumps() 的 output 转换为字符串并返回?

[英]Converting the output of pickle.dumps() into a string and back?

在我的 Python 程序中,我有一个列表,其中包含来自自定义 class 的一些对象:

# Some example program, not the actual code.
class SomeClass:
    def __init__(self):
        import random
        import os
        self.thing = random.randint(5,15)
        self.thing2 = str(os.urandom(16))
        self.thing3 = random.randint(1,10)
        self.thing4 = "You get the idea"
a_list = [SomeClass(),SomeClass(),SomeClass(),SomeClass(),SomeClass()]
import pickle
print((pickle.dumps(a_list)))

我需要将 pickle.dumps() 的 output 转换成一个字符串,这很简单,但是我如何将它转换回 pickle.loads() 可以使用的字节 stream? 帮助将不胜感激。

  • 我尝试将其转换为 UTF-8,但由于我需要将字符串保存到的文件是 UTF-8 编码的,所以这不起作用。

“字符串化”二进制数据的常用方法是对其进行 base64 编码:

>>> import pickle
>>> import base64
>>> L = list(range(5))
>>> ps = pickle.dumps(L)
>>> ps
b'\x80\x04\x95\x0f\x00\x00\x00\x00\x00\x00\x00]\x94(K\x00K\x01K\x02K\x03K\x04e.'
>>> s = base64.b64encode(ps).decode('ascii')
>>> s
'gASVDwAAAAAAAABdlChLAEsBSwJLA0sEZS4='
>>># Round trip
>>> pickle.loads(base64.b64decode(s))
[0, 1, 2, 3, 4]

Base64 编码通常用于在纯文本环境(如 HTTP)中传输二进制数据。 但是,如果您想将腌制数据保存到文件中,您可以直接通过以二进制模式打开文件来执行此操作:

with open('myfile.bin', 'wb') as f:
    pickle.dump(my_object, f)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM