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本语言中使用,不能跨语言使用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章