下面说一下Python的json模块和pickle模块中数据的序列化操作。这两个模块的主要区别如下:json是一种文本序列化格式,而pickle是一种二进制序列化格式;json是我们可以直观阅读的东西,而pickle则不能;json具有互操作性,在Python系统之外广泛使用,而pickle是Python特定的;默认情况下,json只能表示Python内置类型的一个子集,不能表示自定义类;但是pickle可以表示大量的Python数据类型。Json模块Json是一种轻量级的数据交换格式。由于其传输数据量小,数据格式容易分析的特点,被广泛应用于各种系统之间的交互操作,作为一种数据格式来传递数据。它包含几个常用的函数,如下:dumps()函数dumps()函数可以将Python对象编码成Json字符串。例如:#把字典转成json串后加上ensure_ascii=False就可以识别中文了,indent=4就是显示importjsond={'小明':{'sex':'male','addr':'上海','年龄':26},'小红':{'性别':'女','地址':'上海','年龄':24},}print(json.dumps(d,ensure_ascii=False,indent=4))#执行结果:{"小明":{"sex":"Male","addr":"Shanghai","age":26},"Xiaohong":{"sex":"Female","addr":"Shanghai","age":24}}dump()函数dump()函数可以将Python对象编码为json字符串,自动写入文件,无需单独写入文件。例如:#字典转成json串,不用写文件,自动转成的json串写入文件'users.json'importjsond={'小明':{'sex':'male','addr':'Shanghai','age':26},'Xiaohong':{'sex':'female','addr':'Shanghai','age':24},}#打开一个名字为空的文件for'users.json'fw=open('users.json','w',encoding='utf-8')json.dump(d,fw,ensure_ascii=False,indent=4)loads()函数加载()函数可以将json字符串转换为Python数据类型。例如:#这是users.json文件中的内容{"Xiaoming":{"sex":"Male","addr":"Shanghai","age":26},"Xiaohong":{"sex":"Female","addr":"Shanghai","age":24}}#!/usr/bin/python3#将json字符串转成python数据类型importjson#打开'users.json的json文件'f=open('users.json','r',encoding='utf-8')#读取文件res=f.read()print(json.loads(res))#执行结果:{'小明':{'sex':'男','addr':'上海','age':26},'小红':{'sex':'女','addr':'上海','age':24}}load()函数load()类似于loads()。load()函数可以将json字符串转换为Python数据类型。不同的是前者的参数是文件对象,不需要单独读取文件。例如:#将json字符串转成python数据类型:dictionary,传一个文件对象,不需要单独读取文件importjson#打开文件f=open('users.json','r',encoding='utf-8')print(json.load(f))#执行结果:{'小明':{'性别':'男','addr':'上海','年龄':26},'小红':{'sex':'female','addr':'Shanghai','age':24}}Pickle模块Pickle模块类似于Json模块,同样包含四个函数,分别是dump(),dumps()、loads()和load(),它们的主要区别如下:dumps和dump的区别是前者序列化对象,后者序列化对象保存在文件中。loads和load的区别是前者反序列化序列化后的字符串,后者从文件中读取序列化后的字符串并反序列化。dumps()函数dumps()函数可以将数据以特殊的形式转换成只有python语言才能识别的字符串,例如:importpickle#dumpsfunctionimportpickledata=['A','B','C','D']print(pickle.dumps(data))b'\x80\x03]q\x00(X\x01\x00\x00\x00Aq\x01X\x01\x00\x00\x00Bq\x02X\x01\x00\x00\x00Cq\x03X\x01\x00\x00\x00Dq\x04e.'dump()函数dump()函数可以将数据以一种特殊的形式转化为只有python语言才能理解的字符串,并写入到文件中.例如:#dumpfunctionwithopen('test.txt','wb')asf:pickle.dump(data,f)print('writesuccess')writesuccessloads()functionloads()functioncanconvertpickledatatopython数据结构。例如:#loadsfunctionmsg=pickle.loads(datastr)print(msg)['A','B','C','D']load()functionTheload()函数可以从数据文件中pickle中读取数据并将其转换为python数据结构。例子:#loadfunctionwithopen('test.txt','rb')asf:data=pickle.load(f)print(data)['A','B','C','D']小结本节介绍Python中json&pickle模块的常用操作,提供对数据序列化和反序列化的支持。
