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则是反序列化. ...
随机推荐
- WF的简单使用
WWF(Windows Workflow Foundation):是微软提供的工作流技术,工作流就是对工作流程的规范和抽象.主要有三个部分Activity(活动).Runtime(工作流运行时)和To ...
- canvas API笔记
HTML5添加的最受欢迎的功能就是<canvas>元素,这个元素负责在页面的指定区域通过js动态地在这个区域绘制图形. <canvas> 由几组API构成. 准备: <c ...
- UVA 11776 - Oh Your Royal Greediness! - [贪心/模拟]
题目链接:https://cn.vjudge.net/problem/UVA-11776 题意: 给出数字n(0<=n<=1000),代表有n个农民,接下来有n行,每行两个数字S和E代表这 ...
- Spring Cloud微服务开发笔记5——Ribbon负载均衡策略规则定制
上一篇文章单独介绍了Ribbon框架的使用,及其如何实现客户端对服务访问的负载均衡,但只是单独从Ribbon框架实现,没有涉及spring cloud.本文着力介绍Ribbon的负载均衡机制,下一篇文 ...
- Linux 虚拟串口及 Qt 串口通信实例
Linux 虚拟串口及 Qt 串口通信实例 2011-06-22 17:49 佚名 互联网 字号:T | T Linux 虚拟串口及 Qt 串口通信实例是本文所要介绍的内容,在实现过程中,打开了两个伪 ...
- redux+react-redux+示例的快速上手体验
刚学习redux的同学提供一些可供参考的例子. 之前用vue用了很久 vue的语法糖用起来是真的舒服 react 其实毕竟他们都是类似的框架, 虽然语法大不同, 但是有些地方的思想还是很像的, 废话 ...
- linux中vim常用命令
vim工作模式 vi 文件名 进入命令模式 i a o 进入插入模式 ESC键 回到命令模式 : 进入编辑模式 添加行号 :set number/nu :wq 保存退出 插入命令 a 在光标所在字符后 ...
- 【虫师】【selenium】参数化
# 1 #coding=utf-8 from selenium import webdriver import os,time source = open("F:\\test\\info.t ...
- HTML5-CSS3-JavaScript(2)
我们就从HTML5的基础总结起.希望可以提高自身的基础. HTML5 新增的通用属性 1. contentEditable 属性 HTML5 为大部分HTML元素都增加了contentEditable ...
- boost--smart_ptr库
C++没有类似Java.C#等语言的垃圾回收机制,内存管理是最为头痛的工作. new.delete以及指针的不恰当运用是C++中造成资源获取/释放问题的根源. 智能指针是解决这些问题的一种方案,boo ...