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格式,因为大家用得最多,各种语言相互处理数据方便。

 

 

第一次写学习博客,主要目的为记录自己的学习,心得,方便自己巩固学习的知识点,有不正确的地方,请各位大佬指正!

 

posted @ 2018-09-12 10:57  cunzhishu  阅读(362)  评论(0)    收藏  举报