json模块
(1)json模块的两种方法 :dumps() 和 loads()
import json #------dumps() dic = {'name':'alex'} s = 'hello' data1 = json.dumps(dic) data2 = json.dumps(s) #dumps()的步骤为: ------>"hello" (先把单引号变成双引号) -------->'"hello"' (再外面加上单引号) print(data1,data2) #此时 data为一个json字符串,其特点之一就是 双引号(调用dumps()方法,所有的单引号都会变成双引号) print(type(data1)) #---将数据存入磁盘--- f = open('hello','w') dic_str = json.dumps(dic) f.write(dic_str) # dump()方法:dump(dic_str,f) 就相当于做了上述两步 该方法只适用于文件操作 f.close() #------loads()---从磁盘中读取数据------ f_read = open('hello','r') data = json.loads(f_read.read()) #从文件中读取数据,并将其还原为 dumps()之前的数据类型 #load方法: json.load(f_read) 将相当于json.loads(f_read.read()) 即省去了 .read() 该方法只适用于文件操作 print(data['name']) print(data) print(type(data)) #此时data为字典类型 f_read.close()
(2)
dct='{"1":"111"}' data = json.loads(dct) print(data) print(type(data))
总结:无论数据是怎样创建的,只要满足json格式,就可以json.loads出来,不一定非要dumps的数据才能loads
再上述程序中 如果dct = ‘{'1':'111'}’ 则会报错,因为 json 不认单引号
pickle模块
pickle模块的功能与json大致相同
import pickle #--------------序列化---------------- dic = {'name':'jiao','age':22,'sex':'male'} print(type(dic)) #<class 'dict'> j = pickle.dumps(dic) print(type(j)) #<class 'bytes'> 可知,json.dumps() 是将括号内容转换为字符串形式,而pickle.dumps() 是将其转换为字节形式 f = open('序列化对象_pickle.txt','wb') #注意 w 是写字符串 ,wb 是写入bytes ,j 是 ‘bytes’ f.write(j) #41 和 46 行 等价于 pickle.dump(dic,f) #-------------反序列化------- f = open('序列化对象_pickle.txt','rb') data = pickle.loads(f.read()) #等价于 data = pickle.load(f) print(data['age'])
序列化:
把对象(变量)从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,
序列化之后,就可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上。
反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling。