python学习之 -- 数据序列化

json / pickle 数据序列化

序列化定义:把变量从内存中变成可存储或传输的过程称为序列化。反序列化:把变量内容从序列化的对象重新读到内存里称为反序列胡。

序列化模块之--pickle使用注意:在python3里,进行一次序列化后,然后在进行反序列化,不要重复多次序列化,否则无法进行反序列化。pickle:是python独有的序列化模块,只能作用于python变量,是将数据对象转化为bytes。功能:用于python特有的类型和python的数据类型间进行转换。举例:

1 import pickle
2 d = {‘name‘:‘jeck‘,‘age‘:‘22‘}
3 print(pickle.dumps(d))

打印出:b‘\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x08 #这里b代表为bytes
pickle的4个功能如下:dumps , dump:进行序列化功能loads , load:进行反序列化功能
序列化举例1:dumps 序列化作用于变量,将传入的变量序列化为一个bytes,然后可以写入磁盘。

1 import pickle
2 d = {‘name‘:‘jeck‘,‘age‘:‘22‘,‘工作‘:‘IT‘}
3 f = open(‘fname‘,‘wb‘) #必须以二进制读写
4 f.write(pickle.dumps(d))
5 f.close()

序列化举例2:dump 直接将变量序列化到文件中

1 import pickle
2 d = {‘name‘:‘jeck‘,‘age‘:‘22‘,‘工作‘:‘IT‘}
3 f = open(‘fname1‘,‘wb‘)
4 pickle.dump(d,f)
5 f.close()

反序列化举例1:loads:把对象从磁盘读入内存时,先把内容读到一个bytes,然后用loads进行反序列化

1 import pickle
2     f = open(‘fname‘,‘rb‘)
3     print(pickle.loads(f.read())) #将bytes通过loads进行反序列化
4 f.close()

反序列化举例2:load:直接将dump后的序列化文件进行反序列化载入。

1 import pickle
2     f = open(‘fname1‘,‘rb‘)
3     print(pickle.load(f))
4 f.close()

序列化模块之-- jsonjson:是个对象序列化的标准格式,用于在不同编程语言之间进行对象的传递。类似的有xml。但和xml表现形式不同,json表现为一个字符串,xml是用标记标注的不易阅读。在速度上json也比xml快。注意:一般用于序列化通用的列表,字典,等常用序列。如果要序列化python里的函数,类需要单独指定方法和pickle一样,有:dumps,dump 进行序列化。loads,load 进行反序列化功能:用于字符串和python数据类型间进行转换。举例:json序列化后的格式为字符串

1 import json
2 d = {‘name‘:‘jeck‘,‘age‘:‘22‘,‘工作‘:‘IT‘}
3 print(json.dumps(d))
4 print(type(json.dumps(d)))

打印:{"name": "jeck", "age": "22", "\u5de5\u4f5c": "IT"}<class ‘str‘>
序列化举例1:dumps 序列化作用于变量,将传入的变量序列化为一个字符串,然后可以写入磁盘。

1 import json
2 d = {‘name‘:‘jeck‘,‘age‘:‘22‘,‘工作‘:‘IT‘}
3 f = open(‘fname‘,‘w‘)
4 f.write(json.dumps(d))
5 f.close()

序列化举例2:dump 直接将变量序列化到文件中
import json
d = {‘name‘:‘jeck‘,‘age‘:‘22‘,‘工作‘:‘IT‘}
f = open(‘fname1‘,‘w‘)
json.dump(d,f)
f.close()
反序列化举例1:loads:先读取对象,然后用loads进行反序列化

1 import json
2 f = open(‘fname‘,‘r‘)
3 print(json.loads(f.read())) #将字符串通过loads进行反序列化
4 f.close()

反序列化举例2:load:直接将dump后的序列化文件进行反序列化载入。

1 import json
2 f = open(‘fname1‘,‘rb‘)
3 print(json.load(f))
4 f.close()

# 注意 json也可以序列化python中的函数和类,但是序列化后的数据只是函数或者类的结果数据。举例序列化一个类:

1 import json
2 def fun(n):
3     return n
4 x = fun(‘jeck‘)
5 f = open(‘fname‘,‘w‘)
6 f.write(json.dumps(x,default=fun))  #default参数就是告知json如何进行序列化
7 f.close

一般通用方法为:print(json.dumps(x, default=lambda obj: obj.__dict__))其中的__dict__不需我们在类中定义,因为通常class的实例都有一个__dict__属性,它就是一个字典,用来存储实例变量.当然函数和类序列化一般也不会使用。

在单独举例通过pickle对函数的序列化和反序列化举例1:进行函数的序列化

1 import pickle
2 def fun(n):
3     return n
4 f = open(‘fname‘,‘wb‘)
5 f.write(pickle.dumps(fun))
6 f.close  #成功

2:进行反序列化import picklef = open(‘fname‘,‘rb‘)pickle.loads(f.read())f.close报错:AttributeError: Can‘t get attribute ‘fun‘ on <module ‘__main__‘ from是因为序列化后内存已释放这个函数的内存地址,所以报错。需要手工把这个函数添加到反序列化开头如下:

1 import pickle
2 def fun(n):
3     return n # 这个函数内容可以手工修改。
4 f = open(‘fname‘,‘rb‘)
5 print(pickle.loads(f.read()))
6 f.close

这样才可以实现函数的反序列化,个人觉得没啥意义。而且反序列化时可以先修改函数内容,这样反序列化出的内容就是修改后的内容。

注意:pickle和json的序列化和反序列化必须各自独自使用,不能相互混用。
时间: 2024-08-09 19:53:13

python学习之 -- 数据序列化的相关文章

[Python] Python 学习 - 可视化数据操作(一)

Python 学习 - 可视化数据操作(一) GitHub:https://github.com/liqingwen2015/my_data_view 目录 折线图 散点图 随机漫步 骰子点数概率 文件目录 折线图 cube_squares.py import matplotlib.pyplot as plt x_values=list(range(1, 5000)) y_values=[pow(x, 3) for x in x_values] plt.scatter(x_values, y_v

Python学习之json序列化

一.什么是序列化 在我们存储数据或者网络传输数据的时候,需要对我们的对象进行处理,把对象处理成方便存储和传输的数据格式.这个过程叫序列化,不同的序列化结果也不同,但目的是一样的,都是为了存储和传输 在Python中三种序列化的方案: pickle,可以将我们Python中任意数据类型转化为bytes并写入到文件中.同样也可以把文件中写好的bytes转换回到我们Python的数据-这个过程被称为反序列化. shelve简单另类的一种序列化方案.有点类似于Redis,可以作为一种小型的数据库来使用.

从零开始的Python学习Episode 17——序列化

序列化 我们把对象(变量)从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其他语 言中也被称之为serialization,marshalling,flattening等等,都是一个意思. 序列化之后,就可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上. 反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling. json 如果我们要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,比如XML,但更好 的方法是序列

Python学习之--数据基础

今天学习到一句话,Python,一切事物都是对象,对象基于类创建. 1 类.对象.方法 类.对象.方法之前的关系:方法是定义在类中的,那基于类,可以创建不同的对象,对象可以使用类中定义的对应的方法. 2 查看对象.方法 1)可以在命令行中直接查看,如下: 使用type() 可以查看一个变量(对象)的类,找到类后,可以使用dir()来查询里面的方法: 也可以使用 help()来查询一个类或者方法的详细说明: help(str) help(str.upper)   2)当然,也可以在IDE中去查看,

python中后端数据序列化是不显示中文的解决方法

我们在前后端交互的时候,让序列化的数据更友好的显示,我们会用到 import json js = json.loads('{"name": "多多"}') print (json.dumps(js)) {"name": "\u54c8\u54c8"} #解决办法很简单: print (json.dumps(js, ensure_ascii=False)) {"name": "多多"} 原

Python学习笔记-数据报表之Excel操作模块

利用Python操作Excel的模块XlsxWriter,可以操作多个工作表的文字.数字.公式.图表等. XlsxWriter模块具有以下功能: 100%兼容的Excel XLSX文件,支持Excel 2003.Excel 2007等版本: 支持所有Excel单元格数据格式: 单元格合并.批注.自动筛选.丰富多格式字符串等: 支持工作表PNG.JPEG图像,自定义图表: 内存优化模式支持写入大文件. 安装XlsxWriter模块 # python3 -m easy_install -i http

python学习之数据

一.向列表中添加元素: 1.append() 向数组中添加一个参数或者数据: 如a.append("1"),不能添加多个数据 2.extend() 添加数据的时候,可以添加添加一个数据,也可以添加一个列表 如:a=[1,2,3] b= ['a','b','c']   a.extend(b) 或者a.extend(['1','a']) 3.insert() 插入数据,可以实现将数据插入到固定位置 如:a.insert(1,'a'),把数据"a"添加到列表a中的第二位,

python 学习笔记 3 -- 数据结构篇上

数据结构是可以处理一些 数据 的 结构 .或者说,它们是用来存储一组相关数据的.在Python中有三种内建的数据结构--列表.元组和字典.本文主要对这三种数据类型以及相关的使用做介绍,以例子的形式演示更加容易理解! 1.列表(List) 列表是处理一组有序项目的数据结构,即你可以在一个列表中存储一个 序列 的项目.在Python中,你在每个项目之间用逗号分割. 列表中的项目应该包括在**方括号**中,这样Python就知道你是在指明一个列表.一旦你创建了一个列表,你可以添加.删除或是搜索列表中的

python 学习笔记 3 -- 数据结构篇下

5.引用 当你创建一个对象并给它赋一个变量的时候,这个变量仅仅 引用 那个对象,而不是表示这个对象本身!也就是说,变量名指向你计算机中存储那个对象的内存.这被称作名称到对象的绑定.eg. [python] view plaincopy # -*- coding: utf-8 -*- shoplist = ['apple', 'mango', 'carrot', 'banana'] print "we copy the shoplist to mylist directly \"with