序列化 : 在储存数据或者网络传输数据的时候.需要对对象进行处理,把对象处理成方便储存和传输的数据格式.这个过程叫序列化.
三种序列化的方案:
1.pickle 将python的数据类型转化成bytes并写入到文件中. 或把文件中写好的bytes转回python的数据,这个过程成为反序列化
import pickle class Person: def __init__(self, name, age): self.name = name self.age = age p1 = Person('Max', 18) #创建对象 #序列化 bs = pickle.dumps(p1)#b'\x80\x03c__main__\nPerson\nq\x00)\x81q\x01}q\x02(X\x04\x00\x00\x00nameq\
x03X\x03\x00\x00\x00Maxq\x04X\x03\x00\x00\x00ageq\x05K\x12ub.' #反序列化 pp1 = pickle.loads(bs) #<__main__.Person object at 0x0386A290>
写入文件操作
import pickle class Person: def __init__(self, name, age): self.name = name self.age = age p1 = Person('Max', 18) f = open('info.pickle', mode = 'wb') pickle.dump(p1, f) f.close() f = open('info.pickle', mode = 'rb') pp1 = pickle.load(f) print(pp1.name) #Max
上述为写入一个对象,如果是写入多个对象,每次执行pickle.load(f)即可调出下一个对象
可以选择使用while 循环调出所有的对象:
while 1: try: p = pickle.load(f) print(p) except Exception: break
多个对象读写,建议使用list,方便全部取出,循环读取**
import pickle class Person: def __init__(self, name, age): self.name = name self.age = age p1 = Person('Max', 18) p2 = Person('amy', 18) p3 = Person('fred', 18) lst = [p1,p2,p3] f = open('info.pickle', mode = 'wb') pickle.dump(lst, f) f.close() f = open('info.pickle', mode = 'rb') ll = pickle.load(f) #对象列表 for i in ll: print(i.name,end=' ') #Max amy fred
2. shelve 简单另类的一宗序列化的方案
3. json 将python中常见的字典,列表转化成字符串.是目前前后端数据交互使用频率最高的一种数据格式
import json dic = {'a': 'apple', 'b': 'banana', 'c': 'pear'} s = json.dumps(dic, ensure_ascii = False) #如果没有ensure_ascii = False,则value以ascii码形式展示 print(s) #{"a": "apple", "b": "banana", "c": "pear"}→字符串 s1 = '{"a": "apple", "b": "banana", "c": "pear"}' dic = json.loads(s1) print(type(dic),dic) #<class 'dict'> {'a': 'apple', 'b': 'banana', 'c': 'pear'} →字典
json文件操作
import json dic = {'a': 'apple', 'b': 'banana', 'c': 'pear'} f = open('fruit.json', mode = 'w', encoding = 'utf-8') #写入一个字典 json.dump(dic, f, ensure_ascii = False) f.close() f = open('fruit.json', mode = 'r', encoding = 'utf-8') dic = json.load( f) print(dic) #{'a': 'apple', 'b': 'banana', 'c': 'pear'} f.close()
对于多个字典,和pickle类似,可以写到列表中,再写入json