码迷,mamicode.com
首页 > 编程语言 > 详细

python 序列化

时间:2019-04-11 01:11:39      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:数据结构   class   直接   进制   div   字符串   类型   lse   跨平台   

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 序列化

标签:数据结构   class   直接   进制   div   字符串   类型   lse   跨平台   

原文地址:https://www.cnblogs.com/zt0903/p/10687006.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!