python3数据序列化工具json
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python3数据序列化工具json相关的知识,希望对你有一定的参考价值。
文件中默认只能存字符串,是不能存字典、二进制这种特殊类型的数据的,如果想把字典格式的数据存入到文件中,需要转换一下数据类型
data = {"Name":"XiaoMing","Age":22}
f = open("test.txt","r+",encoding="utf-8")
f.write(str(data)) //把data转换成字符串类型
f.close()
如果现在读取数据的话,字符串肯定不能使用data["Name"]这样的形式来调取值,所以还需要把字符串转换成字典格式
f = open("test.txt","r+",encoding="utf-8")
data = eval(f.read()) //小技巧,使用eval可以把字符串转换为字典格式
f.close()
print(data["Name"])
虽然上面的方式也能实现序列化与反序列化的效果,但是我们还是推荐使用标准的方式来操作
import json
data = {"Name":"XiaoMing","Age":22}
print(type(json.dumps(data))) //此处为测试,看一下dumps后的数据是什么类型
f = open("test.txt","w",encoding="utf-8")
f.write( json.dumps(data) ) //使用json.dumps进行序列化
f.close()
接下来看一下json的反序列化
import json
f = open("test.txt","r",encoding="utf-8")
data = json.loads(f.read()) //使用json.loads进行反序列化
f.close()
print(data["Name"])
小总结:json只能处理一些简单的数据格式,比如字典、列表、字符串等,但是json在所有的语言上都是通用的,比如用python的程序和java的程序进行交互,就需要用到json来进行转换。
那如果想要处理一些复杂的数据呢,比如在字典中接收一个函数,看一下例子:
import pickle //需要导入pickle模块
def hello(name):
print("name",name)
data = {"Name":"XiaoMing","Age":22,"aa":hello} //把函数的内存地址当做字典的值,比作复杂一些的数据类型
f = open("test.txt","wb") //因为pickle后的数据是二进制类型,所以打开模式要使用"b"
f.write(pickle.dumps(data))
f.close()
print(type(pickle.dumps(data))) //最后打印pickle.dumps后的数据类型
pickle反序列化
import pickle
def hello(name):
print("name",name)
f = open("test.txt","rb")
data = pickle.loads(f.read()) //pickle.loads为反序列化
f.close()
print(data["aa"]("bbb")) //此处为函数的传参
小总结:pickle只能再python本语言中使用,不能跨语言使用。
以上是关于python3数据序列化工具json的主要内容,如果未能解决你的问题,请参考以下文章
Python3 shevel模块,更高级的json序列化数据类型模块(比pickle更高级)