python - 去除 pickle 对象周围的字符串 wrapper ?

标签 python python-3.x serialization pickle

在下面的代码中:

>>> import pickle
>>>
>>> class Thing:
    def __init__(self):
        self.name = "stackoverflow"
        self.age = 11

>>> a = pickle.dumps(Thing())
>>> a
b'\x80\x03c__main__\nThing\nq\x00)\x81q\x01}q\x02(X\x04\x00\x00\x00nameq\x03X\r\x00\x00\x00stackoverflowq\x04X\x03\x00\x00\x00ageq\x05K\x0bub.'
>>> str(a)
"b'\\x80\\x03c__main__\\nThing\\nq\\x00)\\x81q\\x01}q\\x02(X\\x04\\x00\\x00\\x00nameq\\x03X\\r\\x00\\x00\\x00stackoverflowq\\x04X\\x03\\x00\\x00\\x00ageq\\x05K\\x0bub.'"

我的问题是,如何将 str(a) 转换回 a,因为一旦发生转换,我就可以使用 pickle.loads( )

我转换为字符串的原因是我希望将 str(a) 字符串添加到另一个将进一步“pickle ”的字符串中。我见过的大多数其他帖子都假设字节已经是字符串或字符串到字节转换的编码,但都不是。

最佳答案

以下内容似乎有效,因为任意二进制字符串都是有效的 latin1 ,它始终可以解码为 Unicode,然后再次编码回原始字符串(如 this answerSven Marnach 中指出的那样) )。

import pickle

class Thing:
    def __init__(self):
        self.name = "stackoverflow"
        self.age = 11

a = pickle.dumps(Thing())
str_a = a.decode('latin1')    
b = str_a.encode('latin1')

assert a == b

关于python - 去除 pickle 对象周围的字符串 wrapper ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55092763/

相关文章:

python - SCons:如何在构建了一些目标后生成依赖项?

python - 如何将大量数据传递给 celery

c++ - 在 C++ 中序列化/反序列化简单协议(protocol)的最佳方式

python代码发出蜂鸣声

Python 每执行 98 次就会面临开销?

python-3.x - 来自多个文件的Python多线程

python - 从字符串中删除特殊字符,例如笑脸,但保留德语特殊字符

python-3.x - 通过计算数组中的字符串并添加数组中的值来填充 pandas 数据框

java - Gson:java.lang.StackOverflowError: null

python - 根据另一个数据框中的列填充数据框中的空值