2.常用模块二

一.什么是序列化

  在我们存储数据或网络传输数据的时候,需要对我们的对象进行处理,把对象处理成方便存储和传输的数据格式,这个过程叫做序列化,不同的序列化,结果也不同,但是目的是一样的,都是为了存储和传输

  在python中存在三种序列化方案

   1.pickle 可以将我们python中的任意数据类型转换成bytes并写入到文件,同样也可以把文件中写好的bytes转换成我们的python的数据,这个过程叫做反序列化.

   2.shelve 简单另类的一种序列化方案,有点类似后面学到的redis,可以作为一种小型的数据库来使用

   3.json 将python中常见的字典,列表转换成字符串,是前后端数据交换使用频率最高的一种数据格式.

1..pickle

  pickle就是把我们的python对象写入到文件中的一种解决方案,写入的是bytes,给机器看的

import pickle

class Elephant:
    def __init__(self,name,weight,height):
        self.name = name
        self.weight = weight
        self.height = height

    def tiaoxi(self):
        print(f"{self.name}大象特别喜欢调戏人")

e = Elephant("alex",'180T','172')
e.tiaoxi()

bs = pickle.dumps(e) #把对象进行序列化
print(bs)
bs =b'\x80\x03c__main__\nElephant\nq\x00)\x81q\x01}q\x02(X\x04\x00\x00\x00nameq\x03X\x04\x00\x00\x00alexq\x04X\x06\x00\x00\x00weightq\x05X\x04\x00\x00\x00180Tq\x06X\x06\x00\x00\x00heightq\x07X\x03\x00\x00\x00172q\x08ub.'

dx = pickle.loads(bs)
dx.tiaoxi()

e1 = Elephant("alex",'180T','172')
e2 = Elephant("wusir",'120T','167')
f = open("大象",mode = "wb")
#这也是序列化
pickle.dump(e1,f) #没有s的这个方法是把对象打散写入到文件,序列化的内容不是给人看的
pickle.dump(e2,f)

f = open("大象",mode="rb")
while 1:
    try:
        obj = pickle.load(f)
        obj.tiaoxi()
    except Exception:
        break

e1 = Elephant("alex",'180T','172')
e2 = Elephant("wusir",'120T','167')

lst = [e1,e2]
pickle.dump(lst,open("大象",mode="wb"))

lst = pickle.load(open("大象",mode="rb"))

#读
for dx in lst:
    dx.tiaoxi()

2.shelve

  shelve提供python的持久化操作. 什么叫持久化操作呢? 说白话,就是把数据写到硬盘上. 在操作shelve的时候非常的像操作一个字典.  这个东西到后期. 就像redis差不多. 

import shelve
f = shelve.open('file')
f['key'] = {'int':10, 'float':9.5, 'string':'alex'}  #直接对文件句柄操作,就可以存入数据
f.close()

import shelve
f1 = shelve.open('file')
string = f1['key']  #取出数据的时候也只需要直接用key获取即可,但是如果key不存在会报错
f1.close()
print(string) 

3.json

json格式

wf = {    
    "name":"汪峰",
    "age":18,
    "hobby":"上头条",
    "wife":{        
        "name":'⼦子怡',
        "age":19,
        "hobby":["唱歌", "跳舞", "演戏"]
    }
}
import json

dic = {"baby":None,"alex":False,"wusir":"佩奇"}
s = json.dumps(dic,ensure_ascii=False)
print(s)#{"baby": null, "alex": false, "wusir": "佩奇"}


d = json.loads('{"baby": null, "alex": false, "wusir": "佩奇"}')
print(d["alex"])

f = open("baby.json",mode="w",encoding="utf-8")
json.dump({"baby":None,"alex":False,"wusir":"佩奇"},f,ensure_ascii=False)

f = open("baby.json",mode="r",encoding="utf-8")
obj = json.load(f)
print(obj)

  

posted @ 2019-02-24 14:54  等待の喵  阅读(225)  评论(0编辑  收藏  举报