#pickle序列化,并写入文件 import pickle d=dict(name='Bob',age=20,score=80) d['name']='Bill' print(pickle.dumps(d)) #pickle.dump()直接把对象序列化后写入一个file-like Object f=open('dump.txt','wb') pickle.dump(d,f) f.close() #当我们要把对象从磁盘读到内存时, #可以先把内容读到一个bytes,然后 #用pickle.loads()方法反序列化出对象, #也可以直接用pickle.load()方法从一个 #file-like Object中直接反序列化出对象 f=open('dump.txt','rb') d=pickle.load(f) f.close() print(d) #JSON,JSON表示出来就是一个字符串,可以被所有语言读取 #不仅是标准格式,并且比XML更快, #而且可以直接在Web页面中读取,非常方便 import json d=dict(name='Bob',age=20,score=88) print(json.dumps(d)) #dumps()方法返回一个str #把JSON反序列化为Python对象,用loads()或者对应的load()方法 json_str ='{"age":20,"score":88,"name":"Bob"}' print(json.loads(json_str)) #JSON进阶 class Student(object): def __init__(self,name,age,score): self.name = name self.age =age self.score=score s=Student('Bob',20,95) # 默认情况下,dumps()方法不知道如何将Student实例变为一个JSON的{}对象。 #可选参数default就是把任意一个对象变成一个可序列为JSON的对象,我们只需要 #为Student专门写一个转换函数,再把函数传进去即可 def student2dict(std): return { 'name':std.name, 'age':std.age, 'score':std.score } #Student实例首先被student2dict()函数转换成dict, #然后再被顺利序列化为JSON print(json.dumps(s,default =student2dict)) #通常class的实例都有一个__dict__属性,它就是一个dict, #用来存储实例变量。也有少数例外,比如定义了__slots__的class print(json.dumps(s,default =lambda obj:obj.__dict__)) #把JSON反序列化为一个Student对象实例,loads()方法首先转换出一个dict对象, #然后,我们传入的object_hook函数负责把dict转换为Student实例 def dict2student(d): return Student(d['name'],d['age'],d['score']) json_str ='{"age":20,"score":98,"name":"Bob"}' #打印出的是反序列化的Student实例对象 print(json.loads(json_str,object_hook=dict2student)) #练习 #json.dumps 序列化时对中文默认使用的ascii编码. #想输出真正的中文需要指定ensure_ascii=False obj = dict(name='小明', age=20) s = json.dumps(obj, ensure_ascii=True) print(s) s = json.dumps(obj, ensure_ascii=False) print(s)
Sign in to make a reply
郝仁E哥