Python常用模块——json,pickle模块

什么是序列化?

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

为什么要序列化?

  我们编写的程序,会涉及到各种各样的对象、数据结构,它们通常是以变量的形式在内存中存在着。当程序运行结束后,这些变量也就会被清理。但我们有时希望能够在下一次编写程序时恢复上一次的某个对象(如机器学习中的到结果,需要程序运行较长时间,多次运行时间成本太大),这就需要我们将变量进行持久化的存储。一种方式是利用文件读写的方式将变量转化为某种形式的字符串写入文件内,但需要自己控制存储格式显得十分笨拙。更好的方式是通过序列化的方式将变量持久化至本地。

  用于序列化的两个模块:

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

JSON

import json

data = {"k1":"v1","k2":"v2"}
# json.dumps() 把数据通过特殊的形式转换为所有程序语言都认识的字符串并写入文件
with open("Test.txt","w") as f:
    json_str = json.dump(data,f)

# json.load() 将序列化字符串从文件读取并反序列化
with open("Test.txt","r") as f:
    print(json.load(f))# 结果是:{‘k1‘: ‘v1‘, ‘k2‘: ‘v2‘}

# json.dumps()  把数据通过特殊的形式转换为所有程序语言都认识的字符串
json_str1 = json.dumps(data)
print(json_str1)# 结果是:{"k1": "v1", "k2": "v2"}

#json.loads  将序列化字符串反序列化
json_str2 = json.loads(json_str1)
print(json_str2)# 结果是:{‘k1‘: ‘v1‘, ‘k2‘: ‘v2‘}

JSON

pickle

import pickle
data = {"k1":"v1","k2":"v2"}
# pickle.dumps() 把数据通过特殊的形式转换为只有Python认识的字符串并写入文件
with open("Test1.txt","wb") as f:
    pickle_str = pickle.dump(data,f)

# pickle.load() 将序列化字符串从文件读取并反序列化
with open("Test1.txt","rb") as f:
    print(pickle.load(f))# 结果是:{‘k1‘: ‘v1‘, ‘k2‘: ‘v2‘}

# pickle.dumps()  把数据通过特殊的形式转换为所有程序语言都认识的字符串
pickle_str1 = pickle.dumps(data)
print(pickle_str1)# 结果是:b‘\x80\x03}q\x00(X\x02\x00\x00\x00k1q\x01X\x02\x00\x00\x00v1q\x02X\x02\x00\x00\x00k2q\x03X\x02\x00\x00\x00v2q\x04u.‘

#pickle.loads  将序列化字符串反序列化
pickle_str2 = pickle.loads(pickle_str1)
print(pickle_str2)# 结果是:{‘k1‘: ‘v1‘, ‘k2‘: ‘v2‘}

pickle

  两者比较

    JSON:

      优点:跨语言,体积小

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

    pickle:

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

      缺点:只有Python认识,存储数据占空间大

原文地址:https://www.cnblogs.com/Ojia/p/9496010.html

时间: 2024-10-08 10:21:59

Python常用模块——json,pickle模块的相关文章

python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib subprocess logging re正则

python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib  subprocess logging re正则 转自老男孩老师Yuan:http://www.cnblogs.com/yuanchenqi/articles/5732581.html 模块&包(* * * * *) 模块(modue)的概念: 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,

python开发模块基础:序列化模块json,pickle,shelve

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

Python基础(12)_python模块之sys模块、logging模块、序列化json模块、pickle模块、shelve模块

5.sys模块 sys.argv 命令行参数List,第一个元素是程序本身路径 sys.exit(n) 退出程序,正常退出时exit(0) sys.version 获取Python解释程序的版本信息 sys.maxint 最大的Int值 sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值 sys.platform 返回操作系统平台名称 5.1 使用sys.argv进行登录判断,跳过 i/o阻塞 #使用sys.argv进行登录判断,跳过 i/o阻塞 import s

Python学习笔记——基础篇【第五周】——json & pickle 模块

json & pickle 模块(序列化) 用于序列化的两个模块 json,用于字符串 和 python数据类型间进行转换 pickle,用于python特有的类型 和 python的数据类型间进行转换 Json模块提供了四个功能:dumps.dump.loads.load pickle模块提供了四个功能:dumps.dump.loads.load dumps和dump区别: pickle.dump(info,f) #print(pickle.dumps(info)) #f.write(pick

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

常用模块(json/pickle/shelve/XML)

一.json模块(重点) 一种跨平台的数据格式 也属于序列化的一种方式 介绍模块之前,三个问题: 序列化是什么? 我们把对象(变量)从内存中变成可存储或传输的过程称之为序列化. 反序列化又是什么? 将硬盘上存储的中间格式数据在还原为内存中的数据结构 为什么要序列化? 1.持久保持状态 2.跨平台数据的交互 JSON是什么? java script object notation 就是对象表示法 var obj = {"name":"egon"} 对于我们开发而言 j

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

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

json模块和pickle模块

json模块和pickle模块 一.json模块 作用:用python写了一个程序,用java写了一门程序,这两个程序需要数据之间交流,就产生了一种多种语言通用的数据类型,json串. 序列化:把对象(变量)从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其他语言中也被称之为serialization,marshalling,flattening. 序列化的优点: 持久保存状态:内存是无法永久保存数据的,当程序运行了一段时间,我们断电或者重启程序,内存中关于这个

json&pickle模块shelve模块

json 在不同的编程语言之间传递对象 1 dic = {'name': 'alvin', 'age': 23, 'sex': 'male'} 2 print(type(dic)) # <class 'dict'> 3 4 j = json.dumps(dic) 5 print(type(j)) # <class 'str'> 6 7 f = open('序列化对象', 'w') 8 f.write(j) # -------------------等价于json.dump(dic,