Python常用模块——序列化pickle&json模块

Python常用模块——序列化pickle&json模块

一、什么叫序列化?

序列化是指把内存里的数据类型转变成字符串,以使其能存储到硬盘或通过网络传输到远程,因为硬盘或网络传输时只能接收bytes。

二、为什么要序列化?

你打游戏过程中,打累了,停下来,关掉游戏,想过2天再玩。2天之后,游戏从你上次停止的地方继续运行,你上次游戏的进度肯定保存在硬盘上了,是以何种形式呢?游戏过程中产生的很多临时数据是不规律的,可能在你关掉游戏时正好有10个列表,3个嵌套字典的数据集合在内存里,需要存下来,你如何存?把列表变成文件里的多行多列的形式?那嵌套字典呢?根本没法存。所以,若有种办法可以直接把内存数据存到硬盘上,下次程序再启动,再从硬盘上读回来,还是原来的格式的话,那是极好的。

用于序列化的两个模块:

  • json:用于字符串和python数据类型间进行转换。
  • pickle:用于python特有的类型和python的数据类型间进行转换。

pickle模块提供了4个功能:dumps、dump、loads、load。

import pickle
data = {'k1':123,'k2':'Hello'}
# pickle.dumps 将数据通过特殊的形式转换为只有python语言认识的字符串
p_str = pickle.dumps(data)  # 注意dumps会把数据变成bytes格式
print(p_str)
# pickle.dump 将数据通过特殊的形式转换为只有python语言认识的字符串,并写入文件
with open('result.pk',"wb") as fp:
    pickle.dump(data,fp)
# pickle.load  从文件里加载
f = open("result.pk","rb")
d = pickle.load(f)
print(d)

json模块也提供了4个功能:dumps、dump、loads、load。用法跟pickle一致。

import json
# json.dumps 将数据通过特殊的形式转换位为所有程序语言都认识的字符串
j_str = json.dumps(data) # 注意json dumps生成的是字符串,不是bytes
print(j_str)
#dump入文件
with open('result.json','w') as fp:
    json.dump(data,fp)
#从文件里load
with open("result.json") as f:
    d = json.load(f)
    print(d)

三、json ?vs ?pickle

json:

优点:跨语言(不同语言间的数据传递可用json交接)、体积小

缺点:只能支持int\str\list\tuple\dict

pickle:

优点:专为python设计,支持python所有的数据类型

缺点:只能在python中使用,存储数据占空间大

原文地址:https://www.cnblogs.com/Kwan-C/p/11620722.html

时间: 2024-10-08 00:44:12

Python常用模块——序列化pickle&json模块的相关文章

python序列化 pickle,json模块

Python中用于序列化的两个模块 json     用于[字符串]和 [python基本数据类型] 间进行转换 pickle   用于[python特有的类型] 和 [python基本数据类型]间进行转换 Json模块提供了四个功能:dumps.dump.loads.load pickle模块提供了四个功能:dumps.dump.loads.load pickle.dump[ojb, file [,protocol] 序列化对象,并将结果数据流写入到文件对象中. 必填参数ojb表示要封装的对象

python基础(20):序列化、json模块、pickle模块

1. 序列化 什么叫序列化——将原本的字典.列表等内容转换成一个字符串的过程就叫做序列化. 1.1 为什么要有序列化 为什么要把其他数据类型转换成字符串?因为能够在网络上传输的只能是bytes,而能够存储在文件里的只有bytes和str. 比如,我们在python代码中计算的一个数据需要给另外一段程序使用,那我们怎么给?现在我们能想到的方法就是存在文件里,然后另一个python程序再从文件里读出来.但是我们都知道,对于文件来说是没有字典这个概念的,所以我们只能将数据转换成字典放到文件中.你一定会

Python序列化中json模块和pickle模块

1.什么是序列化? 将原本的字典.列表等内容转换成一个字符串的过程就叫做序列化. 比如,我们在python代码中计算的一个数据需要给另外一段程序使用,那我们怎么给? 现在我们能想到的方法就是存在文件里,然后另一个python程序再从文件里读出来. 但是我们都知道,对于文件来说是没有字典这个概念的,所以我们只能将数据转换成字典放到文件中. 你一定会问,将字典转换成一个字符串很简单,就是str(dic)就可以办到了,为什么我们还要学习序列化模块呢? 没错序列化的过程就是从dic 变成str(dic)

python学习第四十八天json模块与pickle模块差异

在开发过程中,字符串和python数据类型进行转换,下面比较python学习第四十八天json模块与pickle模块差异. json 的优点和缺点 优点  跨语言,体积小 缺点 只能支持 int str list tuple dict pickle 的优点和缺点 优点 专门为python设计,支持python所有的数据类型 缺点 只能python使用,存储数据占空间大 文章来自 www.96net.com.cn 原文地址:https://www.cnblogs.com/96net/p/97806

【python标准库模块四】Json模块和Pickle模块学习

Json模块 原来有个eval函数能能够从字符串中提取出对应的数据类型,比如"{"name":"zhangsan"}",可以提取出一个字典.json模块可一样实现功能,但是更加强大,eval只能识别到python语言的数据结构.json可以识别多语言的数据结构 模块的导入 import json 将数据类型封装成json格式(字符串)用的是dumps dic = {"name":"CodeScrew"} d

Python 序列化 pickle/cPickle模块

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

Python库:序列化和反序列化模块pickle介绍

1 前言 在“通过简单示例来理解什么是机器学习”这篇文章里提到了pickle库的使用,本文来做进一步的阐述. 通过简单示例来理解什么是机器学习 pickle是python语言的一个标准模块,安装python后已包含pickle库,不需要单独再安装.pickle模块实现了基本的数据序列化和反序列化.通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储:通过pickle模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象.在官方的介绍中,序列化操作的英文描述

python常用模块——json、pickle、shelve

常用模块 json pickle shelve json模块和pickle模块很像,方法都一样:json在js.python.java等等中通用,而pickle是python里的. 一. json模块 json模块只需要掌握 dumps和loads即可:另外两个用到时再补充吧: 1. dump() 格式如下: dump(obj, fp, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=N

Python 入门之 内置模块 -- 序列化模块(json模块、pickle模块)

Python 入门之 内置模块 -- 序列化模块(json模块.pickle模块) 1.序列化 Python中这种序列化模块有三种: ? json模块 : ? 不同语言都遵循的一种数据转化格式,即不同语言都使用的特殊字符串.(比如Python的一个列表[1, 2, 3]利用json转化成特殊的字符串,然后在编码成bytes发送给php的开发者,php的开发者就可以解码成特殊的字符串,然后在反解成原数组(列表): [1, 2, 3]) ? json序列化只支持部分Python数据结构:dict,l