json模块
不同语言间的数据交互
eval方法可以将一个字符串转成python对象,但eval方法是有局限性,对于普通的数据类型,json.loads和eval都能用,但遇到特殊类型(函数、类等)的时候,eval就不管用了,因此eval通常用来执行一个字符串表达式,并返回表达式的值。
dic='{"name":"alex"}' f=open('hello','w') f.write(dic) #eval方法将字符串转换为python的数据类型 f_read=open('hello','r') data=f_read.read() print(data) print(eval(data)['name'])
json.dumps()将对象转换为json类型的字符串
json.loads()将json类型的字符串解析成解释器对应的数据类型
import json dic={"name":"alex"} # #将对象(无论什么类型)转化为json字符串,将字符串的引号变为双引号 # data=json.dumps(dic) # print(data) # print(type(data)) # # f=open('new_hello','w') # f.write(data) f_read=open('new_hello','r') read_data=json.loads(f_read.read()) print(read_data) print(type(read_data))
json.dump(data,f)相当于json.dumps(data)+f.write(data)
json.load(f_read)相当于json.loads()+f_read.read()
json.dumps()与json.loads()无需成对使用,只要符合json字符串的格式即可以用json.loads()方法
pickle模块
将对象转换为字节形式,与json模块的方法完全类似,只不过读写文件的形式为二进制'wb','rb'形式读写
#序列化 import pickle dic={'name':'alvin','age':23,'sex':'male'} print(type(dic))#<class 'dict'> j=pickle.dumps(dic) print(type(j))#<class 'bytes'> f=open('序列化对象_pickle','wb')#注意是w是写入str,wb是写入bytes,j是'bytes' f.write(j) #-------------------等价于pickle.dump(dic,f) f.close() #-------------------------反序列化 import pickle f=open('序列化对象_pickle','rb') data=pickle.loads(f.read())# 等价于data=pickle.load(f) print(data['age'])
1