python——json&pickle模块

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。

 

posted @ 2020-09-15 16:07  呱呱、、  阅读(97)  评论(0编辑  收藏  举报