Python之eval、Json、pickle学习
在python基础学习中,我们了解的eval的强大。在Python中,可以将字符串数据类型转换成字符串内部包含的python数据类型,
例:dic = "{"name":"alex"}"
dic是一个字符串,字符串内部其实是一个字典,
我们可以使用eval方法将dic转成一个字典类型的数据
new_dic = eval(dic)
使用的eval发放后,我们可以看到,new_dic就变成了{"name":"alex"},直观上来讲,就是没有了外边的引号。
当然不仅限于内部是一个字典,同样适用于部分的python数据类型,如:列表、元组,集合等等。
但是eval有一定的局限性,
首先来讲,我们在使用eval方法的时候,没有导入任何的模块,因为,eval是python特有的一种方法,已经集成在了python内部,可以直接使用。
但是网络中,文件中存储的数据类型,在各种语言中,会有一定的差异,不利于大家不同语言的数据交流。
这个时候就要提到我们的JSON规范。
JSON初级的了解,就是一种数据存储时候的一种规范,大家都按照这个规范来使用,从而达到了不同语言之间,数据交流,不会出现问题。
在Python中,我们要使用JSON来对数据进行封装,让他变成JSON规范的数据格式,
我们首先需要导入一个模块,import json
json模块一共给我们提供了4个方法,dumps和loads,dump和load
首先,我们怎么样把数据变成json格式呢!
例:dic = {"name":"alex"}
dic_json = json.dumps(dic)
使用了json.dumps方法后,我们来看新的dic_json数据变成了
"{"name":"alex"}",
直观上的讲相当于json给我们的数据加上了引号,让他变成了字符串,
当然在我们print的时候是看不到引号的,不过我们可以通过查看数据类型print(type(dic_json)),由此可以判定,json帮我们把数据转换成了字符串格式
注意点1:在json中是不认‘’(单引号)的。在使用json.dumps的时候,数据中所有的单引号都被处理成双引号。
例:dic = {'name':'alex'},这个字典,使用的单引号,在python中,单引号和双引号是没有区别的,但是json不认,
dic_json = json.dumps(dic),在使用json处理后,dic_json就变成了"{"name":"alex"}"
上面讲的是我们如何讲数据转换成json格式,下面我们来看看,怎么将我们获取到的json数据转换成我们python能使用的数据格式呢
这就要使用到loads方法
json格式的数据:dic_json = "{"name":"alex"}"
dic = json.loads(dic_json)
使用loads方法后,dic就变成 {"name":"alex"}。这个就是我们python能识别的数据类型,字典。
我们就可以使用字典的处理方式,来获取字典里面的值,例:dic["name"],就可以得到alex这个值。
由此我们可以看出,json中dumps是封装数据,loads是解析数据,这里有一个专业名词叫做,序列化【dumps】和反序列化【loads】
在python中,json还有两个方法,dump和load,这两个方法是专用来对于文件操作的(open)。
dump包含写入的功能,load包含读取的功能
例:我们有一个xxx文本
f = open("xxx","r")
dic = json.load(f)----->相当于
dic_json = f.readline()
dic = json.loads(dic_json)
这样我们可以直接获取到,被反序列化后的数据。
例:我们有一个字典:dic = {"name":"alex"}
f = open("xxx","w")
json.dump(f,dic)----->相当与
dic_json = json.dumps
f.wirte(dic_json)
这样我们可以直接讲数据序列化,并写入文件中。
以上就是我们json在python中的简单的处理,来替代eval方法,
因为eval是python特有的方法,处理的数据不能通用,所以我们在实际应用中尽量避免eval来处理数据。
下面我们来介绍pickle方法
pickle和json使用方法几乎一样,区别在于,json是将数据处理成字符串形式,pickle是讲数据处理成字节的形式。
同样pickle的方法也是dumps【序列化】和loads【反序列化】在使用的时候我们同样需要导入pickle模块
import pickle
pickle.dumps(dic)
pickle.loads(dic_pickle)
使用方法同json就不赘述。
在日常中,我们推荐使用json格式,因为大家用得最多,各种语言相互处理数据方便。
第一次写学习博客,主要目的为记录自己的学习,心得,方便自己巩固学习的知识点,有不正确的地方,请各位大佬指正!

浙公网安备 33010602011771号