python 序列化

Posted zt0903

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 序列化相关的知识,希望对你有一定的参考价值。

json模块

json,用于字符串 和 python基本数据类型间进行转换

 

import json

# json 支持跨平台,但仅支持基本的数据类型,用于字符串 和 python数据类型间进行转换
# Json模块提供了四个功能:dumps、dump、loads、load
s = {"user": "pig","status": "50%"}
data = json.dumps(s)  # 序列化:将字典转换成字符串
print(data, type(data))
# 注意,json转换完的字符串类型的字典中的字符串是由""表示的
s1 = json.loads(data) # 反序列化:将一个字符串转换成一个字典
# 注意,要用json的loads功能处理的字符串类型的字典中的字符串必须由""表示
print(s1, type(s1))
# json的dumps和loads也可以处理嵌套的数据类型
li_s = [1, 2, 3, {"k1": "v1", "k2": [1, 2, 3], "k3":{"s1": "s2"}}]
data_li = json.dumps(li_s)
print(data_li, type(data_li))
data2 = json.loads(data_li)
print(data2,type(data2))
# dump方法接收一个文件句柄,直接将字典转换成json字符串写入文件,可多次使用dump写入
f = open("json_file", "w")
s = {"user": "pig", "status": "50%"}
li_s = [1, 2, 3, {"k1": "v1", "k2": [1, 2, 3], "k3":{"s1": "s2"}}]
json.dump(s, f)
json.dump(li_s, f)
f.close
# load方法接收一个文件句柄,直接将文件中的json字符串转换成数据结构返回,只能读取一次,可以是嵌套的数据类型,且不能有多个不同类型的文件句柄
# f = open("json_file")
# data3 = json.load(f)
# print(data3, type(data3))

# 注意:
# 在使用json.dumps时要注意一个问题
# print(json.dumps(‘中国‘))输出的会是‘中国‘的ascii字符码,而不是真正的中文。
# 这是因为json.dumps序列化时对中文默认使用的ascii编码.想输出真正的中文需要指定ensure_ascii = False
contry = {"国籍":"中国"}
print(json.dumps(contry, ensure_ascii=False))

 

pickle模块

pickle,用于python特有的类型 和 python的数据类型间进行转换,不支持跨平台

 

import pickle, time
s = {"user": "pig","status": "50%"}
data1 = pickle.dumps(s)     # 使用pickle的dumps序列化后是一串二进制内容,类型是bytes
print(data1,type(data1))

dic1 = pickle.loads(data1)
print(dic1,type(dic1))     # 反序列化后是正常的字典

f = open("file","wb")
pickle.dump(time.localtime(1000000),f)
f.close()

f = open("file","rb")
s = pickle.load(f)
print(s)

 

shelve 模块

shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式

 

import shelve
# 序列化:
f = shelve.open("shelve_file")
s = {"user": "pig","status": "50%"}
li_s = [1, 2, 3, {"k1": "v1", "k2": [1, 2, 3], "k3":{"s1": "s2"}}]
f["s"] = s
f["li_s"] = li_s
f.close()
# 会生成三个文件,内容看不懂
# 反序列化
d = shelve.open("shelve_file")
print(d["s"])
print(d["li_s"])


del d["s"]   # 可以删除

 

以上是关于python 序列化的主要内容,如果未能解决你的问题,请参考以下文章

python 有用的Python代码片段

Python 向 Postman 请求代码片段

python [代码片段]一些有趣的代码#sort

使用 Python 代码片段编写 LaTeX 文档

python 机器学习有用的代码片段

python 代码片段和解决方案