python序列化数据
在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序列化数据的更多相关文章
- Python之数据序列化(json、pickle、shelve)
本节内容 前言 json模块 pickle模块 shelve模块 总结 一.前言 1. 现实需求 每种编程语言都有各自的数据类型,其中面向对象的编程语言还允许开发者自定义数据类型(如:自定义类),Py ...
- 【转】Python之数据序列化(json、pickle、shelve)
[转]Python之数据序列化(json.pickle.shelve) 本节内容 前言 json模块 pickle模块 shelve模块 总结 一.前言 1. 现实需求 每种编程语言都有各自的数据类型 ...
- Python内存数据序列化到硬盘上哪家强
1. 闲扯一下:文件 磁盘上的数据,我们一般称为 “文件” ,一般不同的文件都有各自的后缀名,比如 .txt .docx .xlsx .jpg .mp3 .avi .这些不同类型的文件一般分为两大类: ...
- Protobuf在Python中的应用(序列化数据)
1.了解Protobuf Protocol Buffer是Google的语言中立的,平台中立的,可扩展机制的,用于序列化结构化数据 - 对比XML,但更小,更快,更简单.您可以定义数据的结构化,然后可 ...
- python序列化: json & pickle & shelve 模块
一.json & pickle & shelve 模块 json,用于字符串 和 python数据类型间进行转换pickle,用于python特有的类型 和 python的数据类型间进 ...
- python 序列化之JSON和pickle详解
JSON模块 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了类 ...
- Python序列化和反序列化
Python序列化和反序列化 通过将对象序列化可以将其存储在变量或者文件中,可以保存当时对象的状态,实现其生命周期的延长.并且需要时可以再次将这个对象读取出来.Python中有几个常用模块可实现这一功 ...
- python序列化pickle/cPickle
一.pickle/Cpickle简介 Python序列化的概念很简单.内存里面有一个数据结构,你希望将它保存下来,重用,或者发送给其他人.你会怎么做?这取决于你想要怎么保存,怎么重用,发送给谁.很多游 ...
- python序列化与反序列
python序列化与反序列 在python中提供了两个模块可进行序列化.分别是pickle和json.他们两者的功能都差不多,dumps和dump都是进行序列化,而loads和load则是反序列化. ...
随机推荐
- 2018-2019-2 20165330《网络对抗技术》Exp1 PC平台逆向破解
目录 实验目标 实验内容 知识点描述 实验步骤 实验过程中遇到的问题 实验感想 实验目标 本次实验的对象是一个名为pwn1的linux可执行文件. -该程序正常执行流程是:main调用foo函数,fo ...
- matplotlib的下载和安装方法
官网:http://matplotlib.org/ Installation节 Visit the Matplotlib installation instructions. Installing节 ...
- getopts shell command -options parameters
说明:原文网址http://blog.chinaunix.net/uid-26807463-id-3151601.html 获取UNIX类型的选项: unix有一个优点就是标准UNIX命令在执行时都具 ...
- 新建虚拟机_WIN7 32位系统
准备工作:下载win7 32位纯净版镜像文件 大部分步骤与安装XP系统相似,此处只说明一下不同: 创建好虚拟机后启动有报错:CHS data ERROR,无法从CD/DVD启动 编辑虚拟机--> ...
- RHEL6 Systemtap 安装笔记
以 RHEL6u3 为例 1 Systemtap 安装 yum install systemtap 跟systemtap有关的有6,7个,全装上,别偷懒 就用yum安装,别傻傻的去下rpm包,吃力不 ...
- 如何用 Keynote 制作动画演示(转)
原文:如何用 Keynote 制作动画演示 Keynote 里的很多特效可以用来制作效果不错的演示,一页页的将需要演示的内容交代清楚后,直接输出成 m4v 的视频格式,为了方便贴到博客或者发布到 Tw ...
- dedecms提取某栏目及子栏目名称到首页怎么弄
我们建网站时有不同的需求,例如为页面创建一个栏目导航,用dedecms如何提取某栏目及子栏目名称和链接呢?如下图所示,先列出指定的顶级栏目,在下方再列出此栏目的所有子栏目. 之前ytkah说过dede ...
- 网络密钥交换协议——Diffie-Hellman
Diffie-Hellman算法是一种交换密钥的算法. 它是眼下比較经常使用的密钥交换算法. 这样的算法的优点是能让两台计算机在不安全的网络环境中完毕密钥的交换. 下面是整个算法的过程.当中红色字体表 ...
- Spark SQL初始化和创建DataFrame的几种方式
一.前述 1.SparkSQL介绍 Hive是Shark的前身,Shark是SparkSQL的前身,SparkSQL产生的根本原因是其完全脱离了Hive的限制. SparkSQL支持查询原 ...
- PAT 1023 Have Fun with Numbers[大数乘法][一般]
1023 Have Fun with Numbers (20)(20 分) Notice that the number 123456789 is a 9-digit number consistin ...