在python中序列化数据可以使用两种不同模块,一种是json格式,另一种是pickle模块!

序列化的概念:

序列化:将对象的状态信息转换为可以存储或可以通过网络传输的过程,传输的格式可以是JSON,XML等。

反序列化就是从存储区域(JSON,XML)读取反序列化对象的状态,重新创建该对象。

JSON模块

json是一种在各个通用的格式,因此可以跨语言之间的去传递数据。

json:一种轻量级数据交互格式,相对于XML而言更简单,也易于阅读和编写,机器也方便解析和生成,json是javascript的一个子集。

python的json模块序列化与反序列化的过程分别是encoding和decoding。

  • encoding:把一个python对象编码转换成Json字符串,对应的方法是load和loads。
  • decoding:把json格式字符串编码转换成python对象,对应的方法是dump和dumps。

json模块提供了四个方法:dump , load, dumps, loads

json的dumps方法与loads方法:dumps把python对象格式化为json字符串保存在变量中,loads方法把json字符串反序列化为python对象。

# dumps功能
# 将数据通过特殊的形式转换为所有程序语言都认识的字符串
In [2]: data = ["a","bb","ccc"] In [3]: j_data = json.dumps(data) In [4]: j_data
Out[4]: '["a", "bb", "ccc"]' In [5]: type(j_data)
Out[5]: str # loads功能
# 将json编码的字符串再转换为python的数据结构
In [6]: meg = json.loads(j_data) In [7]: meg
Out[7]: [u'a', u'bb', u'ccc'] In [8]: type(meg)
Out[8]: list

dump与load的功能与上面的一样,只不过是把数据保存在文件中。

 # dump功能
# 将数据通过特殊的形式转换为所有程序语言都认识的字符串,并写入文件
In [11]: with open("/tmp/tmp.json","wr") as fd:
....: json.dump(data,fd)
....:
[root@db2 tmp]# cat tmp.json
["a", "bb", "ccc"]
[root@db2 tmp]# # load功能
# 从数据文件中读取数据,并将json编码的字符串转换为python的数据结构
In [1]: import json In [2]: fd = open("/tmp/tmp.json","r") In [3]: data = json.load(fd) In [4]: data
Out[4]: [u'a', u'b', u'c'] #注意编码格式

对于字典,json会假设key是字符串(字典中的任何非字符串key都会在编码时转换为字符串),要符合JSON规范,应该只对python列表和字典进行编码。此外,在WEB应用中,把最顶层对象定义为字典是一种标准做法。
json编码的格式几乎和python语法一致,略有不同的是:True会被映射为true,False会被映射为false,None会被映射为null,元组()会被映射为列表[],因为其他语言没有元组的概念,只有数组,也就是列表。

一些参数使用(摘录):

  • ensure_ascii 默认为True,保证转换后的json字符串中全部是ascii字符,非ascii字符都会被转义。如果数据中存在中文或其他非ascii字符,最好将ensure_ascii设置为False,保证输出结果正常。
  • indent 缩进,默认为None,没有缩进,设置为正整数时,输出的格式将按照indent指定的半角空格数缩进,相当实用。
  • separators 设置分隔符,默认的分隔符是(',', ': '),如果需要自定义json中的分隔符,例如调整冒号前后的空格数,可以按照(item_separator, key_separator)的形式设置。
  • sort_keys 默认为False,设为True时,输出结果将按照字典中的key排序。
data
Out[23]: {'a': True, 'b': False, 'c': None, 'd': (1, 2), 1: 'abc', 'cn': ['中国-北京']} jdata1 = json.dumps(data) #使用默认参数 print(jdata1)
{"a": true, "b": false, "c": null, "d": [1, 2], "": "abc", "cn": ["\u4e2d\u56fd-\u5317\u4eac"]} jdata2 = json.dumps(data,ensure_ascii=False, indent=4) #修改参数 print(jdata2)
{
"a": true,
"b": false,
"c": null,
"d": [
1,
2
],
"": "abc",
"cn": [
"中国-北京"
]
}

pickle模块的使用

json模块是各种编程语言通用的数据格式,pickle是python自带的序列化格式。

在python2中有pickle和cpickle两个模块,在python3中只有pickle一个模块。

pickle对应的也有四个方法和dump和load, dumps和loads。

In [1]: l1 = [1,2,3]

In [2]: l2 = ["a","c","d"]

In [3]: l3 = {1:"a", 2:"c", 3:"d"}

In [5]: fd = open("pickle.kpi", "a")  

In [6]: import pickle  #按顺序把三个列表序列化到文件中

In [8]: pickle.dump(l1,fd)

In [9]: pickle.dump(l2,fd)

In [10]: pickle.dump(l3,fd)

In [11]: fd.close()

In [12]: fd = open("pickle.kpi", "r") 

In [13]: s1 = pickle.load(fd)  #注意反序列化时,读出列表的顺序,遵循先进先出的原则

In [14]: s1
Out[14]: [1, 2, 3] In [16]: s2 = pickle.load(fd) In [17]: s2
Out[17]: ['a', 'c', 'd'] In [19]: s3 = pickle.load(fd) In [20]: s3
Out[20]: {1: 'a', 2: 'c', 3: 'd'}

python序列化数据的更多相关文章

  1. Python之数据序列化(json、pickle、shelve)

    本节内容 前言 json模块 pickle模块 shelve模块 总结 一.前言 1. 现实需求 每种编程语言都有各自的数据类型,其中面向对象的编程语言还允许开发者自定义数据类型(如:自定义类),Py ...

  2. 【转】Python之数据序列化(json、pickle、shelve)

    [转]Python之数据序列化(json.pickle.shelve) 本节内容 前言 json模块 pickle模块 shelve模块 总结 一.前言 1. 现实需求 每种编程语言都有各自的数据类型 ...

  3. Python内存数据序列化到硬盘上哪家强

    1. 闲扯一下:文件 磁盘上的数据,我们一般称为 “文件” ,一般不同的文件都有各自的后缀名,比如 .txt .docx .xlsx .jpg .mp3 .avi .这些不同类型的文件一般分为两大类: ...

  4. Protobuf在Python中的应用(序列化数据)

    1.了解Protobuf Protocol Buffer是Google的语言中立的,平台中立的,可扩展机制的,用于序列化结构化数据 - 对比XML,但更小,更快,更简单.您可以定义数据的结构化,然后可 ...

  5. python序列化: json & pickle & shelve 模块

    一.json & pickle & shelve 模块 json,用于字符串 和 python数据类型间进行转换pickle,用于python特有的类型 和 python的数据类型间进 ...

  6. python 序列化之JSON和pickle详解

    JSON模块 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了类 ...

  7. Python序列化和反序列化

    Python序列化和反序列化 通过将对象序列化可以将其存储在变量或者文件中,可以保存当时对象的状态,实现其生命周期的延长.并且需要时可以再次将这个对象读取出来.Python中有几个常用模块可实现这一功 ...

  8. python序列化pickle/cPickle

    一.pickle/Cpickle简介 Python序列化的概念很简单.内存里面有一个数据结构,你希望将它保存下来,重用,或者发送给其他人.你会怎么做?这取决于你想要怎么保存,怎么重用,发送给谁.很多游 ...

  9. python序列化与反序列

    python序列化与反序列 在python中提供了两个模块可进行序列化.分别是pickle和json.他们两者的功能都差不多,dumps和dump都是进行序列化,而loads和load则是反序列化. ...

随机推荐

  1. WF的简单使用

    WWF(Windows Workflow Foundation):是微软提供的工作流技术,工作流就是对工作流程的规范和抽象.主要有三个部分Activity(活动).Runtime(工作流运行时)和To ...

  2. canvas API笔记

    HTML5添加的最受欢迎的功能就是<canvas>元素,这个元素负责在页面的指定区域通过js动态地在这个区域绘制图形. <canvas> 由几组API构成. 准备: <c ...

  3. UVA 11776 - Oh Your Royal Greediness! - [贪心/模拟]

    题目链接:https://cn.vjudge.net/problem/UVA-11776 题意: 给出数字n(0<=n<=1000),代表有n个农民,接下来有n行,每行两个数字S和E代表这 ...

  4. Spring Cloud微服务开发笔记5——Ribbon负载均衡策略规则定制

    上一篇文章单独介绍了Ribbon框架的使用,及其如何实现客户端对服务访问的负载均衡,但只是单独从Ribbon框架实现,没有涉及spring cloud.本文着力介绍Ribbon的负载均衡机制,下一篇文 ...

  5. Linux 虚拟串口及 Qt 串口通信实例

    Linux 虚拟串口及 Qt 串口通信实例 2011-06-22 17:49 佚名 互联网 字号:T | T Linux 虚拟串口及 Qt 串口通信实例是本文所要介绍的内容,在实现过程中,打开了两个伪 ...

  6. redux+react-redux+示例的快速上手体验

    刚学习redux的同学提供一些可供参考的例子. 之前用vue用了很久 vue的语法糖用起来是真的舒服  react 其实毕竟他们都是类似的框架, 虽然语法大不同, 但是有些地方的思想还是很像的, 废话 ...

  7. linux中vim常用命令

    vim工作模式 vi 文件名 进入命令模式 i a o 进入插入模式 ESC键 回到命令模式 : 进入编辑模式 添加行号 :set number/nu :wq 保存退出 插入命令 a 在光标所在字符后 ...

  8. 【虫师】【selenium】参数化

    # 1 #coding=utf-8 from selenium import webdriver import os,time source = open("F:\\test\\info.t ...

  9. HTML5-CSS3-JavaScript(2)

    我们就从HTML5的基础总结起.希望可以提高自身的基础. HTML5 新增的通用属性 1. contentEditable 属性 HTML5 为大部分HTML元素都增加了contentEditable ...

  10. boost--smart_ptr库

    C++没有类似Java.C#等语言的垃圾回收机制,内存管理是最为头痛的工作. new.delete以及指针的不恰当运用是C++中造成资源获取/释放问题的根源. 智能指针是解决这些问题的一种方案,boo ...