python中的序列化__compiling的博客-程序员秘密

技术标签: python  序列化  

       0.索引 

       1.json序列化变量

       2.numpy序列化ndarray

       3.pickle序列化变量

 

       序列化 (Serialization)是指将对象、数据结构的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。

我们编写的程序,会涉及到各种各样的对象、数据结构,它们通常是以变量的形式在内存中存在着。当程序运行结束后,这些变量也就会被清理。但我们有时希望能够在下一次编写程序时恢复上一次的某个对象(如机器学习中的到结果,需要程序运行较长时间,多次运行时间成本太大),这就需要我们将变量进行持久化的存储。一种方式是利用文件读写的方式将变量转化为某种形式的字符串写入文件内,但需要自己控制存储格式显得十分笨拙。更好的方式是通过序列化的方式将变量持久化至本地。

本文主要针对python中的序列化操作进行记录,定期更新python中的涉及到的序列化问题,以作备忘。

1.json序列化变量

   序列化对象至本地文件:

   json.dump(obj, fp, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)

   对应的反序列化方法:

 json.load(fp, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)

   

   序列化对象至字符串:

   json.dumps(obj, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)

   对应的反序列化方法:

   json.loads(s, *, encoding=None, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)

  2.numpy序列化ndarray

   序列化array:np.save(file, arr, allow_pickle=True, fix_imports=True)

   序列化并压缩:np.savez(file, *args, **kwds)
   反序列化array:numpy.load(file, mmap_mode=None, allow_pickle=True, fix_imports=True, encoding='ASCII')
   示例如下:

np.save('/tmp/123.npy', np.array([[1, 2, 3], [4, 5, 6]]))
np.load('/tmp/123.npy')
#array([[1, 2, 3],
#      [4, 5, 6]])
a=np.array([[1, 2, 3], [4, 5, 6]])
b=np.array([1, 2])
np.savez('/tmp/123.npz', a=a, b=b)
data = np.load('/tmp/123.npz')
data['a']
#array([[1, 2, 3],
# [4, 5, 6]])
data.close()

  3.pickle序列化变量

   pickle和json一样也是python内置的序列化模块。与json相比,pickle的序列化结果虽然不可读,但其可以直接序列化自定义的对象,甚至连递归存储变量、引用变量都可以序列化,不必再像json一样设计自定义的jsonEncoder,带来了极大便利。

   序列化对象至本地:

   pickle.dump(obj, file, protocol=None, *, fix_imports=True)

   对应的反序列化方法:

   pickle.load(file, *, fix_imports=True, encoding=”ASCII”, errors=”strict”)

   示例如下:

import pickle

# An arbitrary collection of objects supported by pickle.包括自定义的对象。
data = {
    'a': [1, 2.0, 3, 4+6j],
    'b': ("character string", b"byte string"),
    'c': {None, True, False}
}

with open('data.pickle', 'wb') as f: # 此处需指定模式为写入字节流,因为pickle是将object转换为二进制字节流
    # Pickle the 'data' dictionary using the highest protocol available.
    pickle.dump(data, f, pickle.HIGHEST_PROTOCOL) # 采用最新的协议,扩展性较好

with open('data.pickle', 'rb') as f: # 读入时同样需要指定为读取字节流模式
    # The protocol version used is detected automatically, so we do not
    # have to specify it.
    data = pickle.load(f)


 

 

 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/brink_compiling/article/details/74781782

智能推荐

VC++ 字符串操作学习总结_dkopg24406的博客-程序员秘密

vc++中各种字符串(转载)http://www.cnblogs.com/tomin/archive/2008/12/28/1364097.htmlCString ,BSTR ,LPCTSTR之间关系和区别CString是一个动态TCHAR数组,BSTR是一种专有格式的字符串(需要用系统提供的函数来操纵,LPCTSTR只是一个常量的TCHAR指针。CString 是一个完全独立的类,...

Reactor5.0源代码混淆器_reactor 工具混编操作_treeMountain的博客-程序员秘密

net reactor加密源码保软件安全-net reactor使用教程用工具加密不能绝对确保软件安全,却能阻大多数人破解出软件的源代码,在一定程序上确保软件安全。  Eziriz .NET Reactor 的主要功能包括:NecroBit IL(转为非托管代码)、反 ILDASM(反编译器)、混淆代码、合并、压缩源码、支持命令行等,支持所有 .NET 框架和几乎所有开发语言,如 C#、C

IIC协议详解_Sup_lz的博客-程序员秘密

IIC(Inter-Integrated Circuit)总线是一种由 NXP(原 PHILIPS)公司开发的两线式串行总线, 用于连接微控制器及其外围设备。多用于主控制器和从器件间的主从通信,在小数据量场合 使用,传输距离短,任意时刻只能有一个主机等特性。在 CPU 与被控 IC 之间、IC 与 IC 之间进行双向传送,高速 IIC 总线一般可达 400kbps 以上。PS: 这里要注意 IIC 是为了与低速设备通信而发明的,所以 IIC 的传输速率比不上 SPI。图1 IIC总线物理拓扑图。

韦东山驱动_Leo丶Fun的博客-程序员秘密

1.nand flash的引脚作用:           当CE(片选信号)由高电平转为低电平时,表明nand flash已经被选中可以和CPU通信了。      当CLE为高电平的时候:IO 0~7传输的是命令(读数据还是写数据),当ALE是高电平的时候:IO 0~7传输的是地址,当CLE和ALE都是低电平的时候,IO 0~7传输的是数据。       当RE(读信号)是低电平时,是在flash...

随便推点

第十周项目一 二叉树构造算法的验证---中序和后序序列构造二叉树(3)_Hdj1597357的博客-程序员秘密

/*烟台大学 计算机与控制工程学院文件名称:二叉树构造算法的验证作 者:胡德杰完成日期:2017年11月30号版 本 号:v1.1.30*/#include #include #include "btree.h"BTNode *CreateBT2(char *post,char *in,int n)/*post存放后序序列,in存放中序序列,n为二叉树结点个数,本算

近似熵理论相关知识与代码实现_近似熵公式_不吃香菇666的博客-程序员秘密

转自:https://blog.csdn.net/Cratial/article/details/79707169建议查看原文。关于本博客的说明: 本次博客主要分享近似熵(Approximate Entropy, AE)的理论相关知识及其代码实现.一、理论基础近似熵(ApEn)是一种用于量化时间序列波动的规律性和不可预测性的非线性动力学参数,它用一个非负数来表示一个时间序列的复杂性,...

nginx redis php,Win7 下搭建 PHP + Nginx + Redis_万象皆俄顷的博客-程序员秘密

1.组件信息php-5.3.26-Win32-VC9-x86.zip下载http://php.net/downloads.phpnginx-1.4.1.zip下载http://nginx.org/en/download.htmlredis-2.0.0.zip下载https://code.google.com/p/servicestack/wiki/RedisWindowsDownload注:本人搭...

FORM 开发相关技巧1_anrry2558的博客-程序员秘密

1.一进页面就能看到表中已生成数据,而不用按ctrl+f11进行查询的语句:在form级的触发器when-new-form-instance中,写如下代码:go_block('XXXX');execute_query;要查询的数据块的名称说明:当使用基于表建立的块时,可使用块里的任何项的GO_BLOCK或者GO_ITEM找到那个块当查询数据到一个块里去,可通过exe

Vue前端axios发送请求后端数据样例_、使用axios发送请求本地data.json中的数据 2、使用定时器模拟后端返回数据 3、使_柯小帅的博客-程序员秘密

1.导入脚手架axios.min.js和vue.min.js2.模拟请求数据data.json{ "sucess": true, "code": 20000, "message": "成功", "data": { "items": [ {"name": "lucy", "age": 20}, {"name": "mary", "age": 21}, {"name": "jack",

栈溢出 shellcode ret2shellcode_栈溢出 ret2shellcode-程序员秘密

shellcode_address = buf_address+0x20 # buf与rbp的距离0x10 + rbp的宽度0x8 + 返回地址的长度0x8。rbp用来存储当前函数状态的基地址,在函数运行时不变,用来索引确定函数的参数或局部变量的位置。将函数的返回地址覆写为我们构造的shell的地址,这样就可以达到获取shell的目的了。将函数的返回地址覆写为我们构造的shell的地址,这样就可以达到获取shell的目的了。栈空间增长方式是从高地址到地址的,也就是栈顶的地址值是小于栈底的地址值的。

推荐文章

热门文章

相关标签