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

Posted ojia

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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‘x80x03}qx00(Xx02x00x00x00k1qx01Xx02x00x00x00v1qx02Xx02x00x00x00k2qx03Xx02x00x00x00v2qx04u.‘

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

  两者比较

    JSON:

      优点:跨语言,体积小

      缺点:只支持:int|strlist upledict

    pickle:

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

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

 


以上是关于Python常用模块——json,pickle模块的主要内容,如果未能解决你的问题,请参考以下文章

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

常用文件操作模块json,pickle和shelve

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

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

python常用模块——jsonpickleshelve

python常用模块(模块和包的解释,time模块,sys模块,random模块,os模块,json和pickle序列化模块)