pickle和cPickle:Python对象的序列化(下)
admin
2023-07-31 00:46:43
0

承接上文 pickle和cPickle:Python对象的序列化(上) 。

重构对象的问题

当与你自己的类一起工作时,你必须保证类被腌渍出现在读取pickle的进程的命名空间中。只有该实例的数据而不是类定义被腌渍。类名被用于在反腌渍时,找到构造器(constructor)以创建新对象。以此——往一个文件写入一个类的实例为例:

1234567891011121314151617181920212223242526272829303132333435 try:    import cPickle as pickleexcept:    import pickleimport sys class SimpleObject(object):     def __init__(self, name):        self.name = name        l = list(name)        l.reverse()        self.name_backwards = \’\’.join(l)        return if __name__ == \’__main__\’:    data = []    data.append(SimpleObject(\’pickle\’))    data.append(SimpleObject(\’cPickle\’))    data.append(SimpleObject(\’last\’))     try:        filename = sys.argv[1]    except IndexError:        raise RuntimeError(\’Please specify a filename as an argument to %s\’ % sys.argv[0])     out_s = open(filename, \’wb\’)    try:        # 写入流中        for o in data:            print \’WRITING: %s (%s)\’ % (o.name, o.name_backwards)            pickle.dump(o, out_s)    finally:        out_s.close() 

在运行时,该脚本创建一个以在命令行指定的参数为名的文件:

123456 $ python pickle_dump_to_file_1.py test.dat WRITING: pickle (elkcip)WRITING: cPickle (elkciPc)WRITING: last (tsal) 

一个在读取结果腌渍对象失败的简化尝试:

123456789101112131415161718192021222324252627 try:    import cPickle as pickleexcept:    import pickleimport pprintfrom StringIO import StringIOimport sys  try:    filename = sys.argv[1]except IndexError:    raise RuntimeError(\’Please specify a filename as an argument to %s\’ % sys.argv[0]) in_s = open(filename, \’rb\’)try:    # 读取数据    while True:        try:            o = pickle.load(in_s)        except EOFError:            break        else:            print \’READ: %s (%s)\’ % (o.name, o.name_backwards)finally:    in_s.close() 

该版本失败的原因在于没有 SimpleObject 类可用:

相关内容

热门资讯

500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
python绘图库Matplo... 本文简单介绍了Python绘图库Matplotlib的安装,简介如下: matplotlib是pyt...
Prometheus+Graf... 一,Prometheus概述 1,什么是Prometheus?Prometheus是最初在Sound...