python序列化与反序列

python序列化与反序列

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

模块1:pickle

pickle是python中独有的序列化模块。有个特别的名字,为泡菜。用于实现Python数据类型与Python特定二进制格式之间的转换。

1. .dumps()和.loads()为格式处理函数

import pickle

#序列化
d = dict(name=‘Bob‘, age=20, score=88)
c = pickle.dumps(d)             #dumps将所传入的变量的值序列化为一个bytes, 就可以将这个bytes写入磁盘或者进行传输。
print(c)
#反序列化c1 = pickle.loads(c)            #把bytes loads为python对象
print((c1))

运行结果:

2..dump()和.load()主要用来读写json文件函数

import pickle
#写
f = open(‘2.txt‘,‘wb‘)
d = dict(name=‘Bob‘, age=20, score=88)
pickle.dump(d,f)             #以二进制文件写入2.txt中
print(d)
f.close()

#读
f1 = open(‘2.txt‘,‘rb‘)
r = pickle.load(f1)         #读出文件内容
print(r)

这里就不上图了。

模块2:json

大部分编程语言都会提供处理json数据的接口,用于实现Python数据类型与通用(json(其他编程语言))字符串之间的转换

直接上源码

1.json.dumps()和json.loads()是json格式处理函数

import json
#序列化
d = dict(name=‘Bob‘, age=20, score=88)
d1 = json.dumps(d)          #dumps方法是把pyhon对象转化为json对象  (转为字符串)
print(type(d1))
print(d1)
#反序列化
d2 = json.loads(d1)         #loads方法是把json对象转化为python对象     (字符串转为python对象)
print(type(d2))
print(d2)

运行结果:

2.json.dump()和json.load()主要用来读写json文件函数

import json

#写操作
json_info = "{‘name‘: ‘Bob‘, ‘age‘: 20, ‘score‘: 88}"       #字符串  也可以是上面代码的d2变量
file = open(‘1.json‘,‘w‘,encoding=‘utf-8‘)                  #创建(打开)一个可写的1.json文件
json.dump(json_info,file)                   #将json信息写入文件中

#读操作
file = open(‘1.json‘,‘r‘,encoding=‘utf-8‘)
info = json.load(file)                  #读取json信息
print(info)

这里我就不上图了  都差不多的

总结:

pickle与json都可以实现序列化以及反序列化,它们之间不同的有以下几点:

1)、pickle不是用于多种语言间的数据传输,它仅作为python对象的持久化,只针对python的数据类型;而json可以支持更多语言的序列化和反序列化,在python中序列化一个自定义的类对象时,会抛出一个 TypeError。2)、json的序列化输出是文本对象是str类型,而pickle序列化的输出是二进制字节-bytes。3)、json可读性优于pickle。

原文地址:https://www.cnblogs.com/c-pyday/p/10500262.html

时间: 2024-10-13 20:05:36

python序列化与反序列的相关文章

python序列化-复习

序列化 From https://www.liaoxuefeng.com/ 在程序运行的过程中,所有的变量都是在内存中,比如,定义一个dict: d = dict(name='Bob', age=20, score=88) 可以随时修改变量,比如把name改成'Bill',但是一旦程序结束,变量所占用的内存就被操作系统全部回收.如果没有把修改后的'Bill'存储到磁盘上,下次重新运行程序,变量又被初始化为'Bob'. 我们把变量从内存中变成可存储或传输的过程称之为序列化,在Python中叫pic

python序列化和csv文件读取

一.python 序列化: 序列化指的是将对象转化为"串行化"数据形式,存储到硬盘或通过网路传输到其他地方,反序列化是指相反的过程,将读取到串行化数据转化成对象.使用pickle模块中的函数,实现序列化和反序列化操作. 序列化使用: pickle.dump(obj,file)     obj是被序列化的对象,file指的是存储的文件. pickle.load(file)  从file读取数据,反序列化成对象. 二.与execl  文件不同,csv文件中: 1.值没有类型,所有值都是字符

Newtonsoft.Json序列化和反序列

这里下载:http://www.newtonsoft.com/products/json/安装:   1.解压下载文件,得到Newtonsoft.Json.dll   2.在项目中添加引用.. 序列化和反序列在.net项目中: Product product = new Product();   product.Name = "Apple"; product.Expiry = new DateTime(2008, 12, 28); product.Price = 3.99M; prod

6.python序列化功能之json&pickle

json模块是个非常重要的模块,可以实现任何语言之间跨平台的数据交换,还可以实现一些比较简单的数据类型的持久化.(这里的持久化就是说,把python内部一些比较简单的数据类型,比如说像字符串,列表,元组,字典之类的数据类型,转换为json字符串的标准格式,保存到硬盘中.) json模块常用函数: json.dumps():将python以字典为主的数据类型,包括(列表,元组,等)转换为json字符串. json.loads():将json字符串转换为python可识别的数据类型. json.du

(转)Newtonsoft.Json序列化和反序列

这里下载:http://www.newtonsoft.com/products/json/安装:   1.解压下载文件,得到Newtonsoft.Json.dll   2.在项目中添加引用.. 序列化和反序列在.net项目中: Product product = new Product();   product.Name = "Apple"; product.Expiry = new DateTime(2008, 12, 28); product.Price = 3.99M; prod

Python 序列化 pickle/cPickle模块

Python序列化的概念很简单.内存里面有一个数据结构,你希望将它保存下来,重用,或者发送给其他人.你会怎么做?这取决于你想要怎么保存,怎么重用,发送给谁.很多游戏允许你在退出的时候保存进度,然后你再次启动的时候回到上次退出的地方.(实际上,很多非游戏程序也会这么干)在这种情况下,一个捕获了当前进度的数据结构需要在你退出的时候保存到硬盘上,接着在你重新启动的时候从硬盘上加载进来. Python标准库提供pickle和cPickle模块.cPickle是用C编码的,在运行效率上比pickle要高,

python序列化pickle

什么叫做序列化? 将内存中的对象转换为线性结构的字符串(有时也称字节流),以便存储或者传输.这种对象转换为字符串的行为通常叫做序列化.内存中的任意数据结构都可以映射为一个字符串. 序列化 函数签名 #pickle.dump(obj, file[, protocol]) 首先尝试将table对象序列化写入文件dbase中,写入方式是字节形式: table = {'a' : [1, 2, 3], 'b' : ['spam', 'egg'], 'c' : {'name' : 'Bob'}} with

序列化和反序列话

定义: 首先来介绍一下什么是序列化和反序列化,下面是序列化和反序列话的定义 序列化:把对象转换为字节序列的过程称为对象的序列化. 反序列化:把字节序列恢复为对象的过程称为对象的反序列化. 序列化的作用: 在介绍序列化的作用之前,请大家思考一个问题,对象是如何存储的,以及对象是如何传输的? 是的,这个问题的答案就是序列化的作用,那么对象是如何存储的呢? 1. 把对象串行化为二进制数据 2. 把对象串行化为格式化数据(比如Json序列化.XML序列化) 可以把串行化后的二进制数据或文件存储到磁盘等设

XML序列化和反序列注意点

XML序列化和反序列注意点 在开发过程中经常要用到xml序列化和反序列操作,在实际开发过程中有一些容易出现错误且不好解决的地方,下面就把我在工作中碰到的一些疑难点简单列出: 首先贴一段后面需要操作的代码 [XmlRoot("User")] public class User { public string Name { get; set; } public int Age { get; set; } [XmlArray("Orders")] [XmlArrayIte