由于上一篇篇幅较大,留下的这一点内容就想在这里说一下,顺便有个小练习给大家一起玩玩,首先来学习json 和 pickle。
之前我们学习过用eval内置方法可以将一个字符串转成python对象,不过,eval方法是有局限性的,对于普通的数据类型,json.loads和eval都能用,但遇到特殊类型的时候,eval就不管用了,所以eval的重点还是通常用来执行一个字符串表达式,并返回表达式的值。
什么是序列化?
我们把对象(变量)从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其他语言中也被称之为serialization,marshalling,flattening等等,都是一个意思。
序列化之后,就可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上。
反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling。
JSON表示的对象就是标准的JavaScript语言的对象,JSON和Python内置的数据类型对应如下:
- json,用于字符串 和 python数据类型间进行转换
- pickle,用于python特有的类型 和 python的数据类型间进行转换(比如函数、类之类的)
# -*- coding:utf-8 -*- # -----------------------json序列化---------------- import json dict1 = {"name": "liu", "age": 18, "sex": "man"} j_dict = json.dumps(dict1) # 转成str格式 f = open("json_dumps_text", "w") f.write(j_dict) # 等价于json.dump(dict1, f),dump就是帮你转成str然后帮你写入 f.close() # -----------------------json反序列化---------------- import json f = open("json_dumps_text", "r") res = json.loads(f.read()) # 等价于json.load(f),loads就是将读出来的str转化成原本的格式,而load就是将文件句柄内的全部读出来然后转换格式 print(res)
# -*- coding:utf-8 -*- # -----------------------pickle序列化---------------- import pickle dict1 = {"name": "liu", "age": 18, "sex": "man"} p_dict = pickle.dumps(dict1) print(type(p_dict)) # <class 'bytes'>,这里是将str转换成bytes类型 print(p_dict) f = open("pickle_text", "wb") # 注意是w是写入str,wb是写入bytess' f.write(p_dict) # 等价于pickle.dump(dict1, f) f.close() # -----------------------pickle反序列化---------------- import pickle f = open("pickle_text", "rb") data = pickle.loads(f.read()) # 等价于data=pickle.load(f) print(data['name'])