day21 pickle json shelve configpaser 模块

1. 序列化:我们在网络传输的时候,需要我们对对象进行处理,把对象处理成方便存储和传输的格式,这个过程就叫序列化
序列化的方法不一定一样,三十目的都是为了方便储存和传输.
在python中有三种序列化方案:
1. pickle 可以将我们python中任意数据类型转化为bytes写入文件中,同样也可以把文件中写好的bytes
转换回我们的python数据,这个过程成为反序列化.
2.shelve 简单另类的一种序列化方案,有点类似后面会学的redis,可以做为一种小型数据库使用
3.json 将python常见的字典,列表转化成字符串.是目前前后端交互使用频率最高的一种的一种数据格式,
2.  pickle
把python对象写入文件中的一种方法,写入的格式是bytes类型,所以pickle的结果是给机器识别而不
是给人看的.
例:
import pickle
class Cat:
def __init__(self,name,color):
self.name=name
self.color=color
def chi(self):
print("%s吃老鼠"%self.name)
c=Cat("波斯","绿色") 
c.chi() #造了一个对象,执行chi()这个动作

bs=pickle.dumps(c) #序列化一个对象,把对象转化成bytes类型
print(bs) #查看效果 是一堆二进制东西,看不懂

cc=pickle.loads(bs)     #反序列化
print(cc) #还是原来那只猫
cc.chi() #也能执行chi()这个动作
print(cc.name) #也能查看他的属性
print(cc.color)

#总的来说:pickle中的dumps可以序列化一个对象. loads可以反序列化一个对象.

------------------------------------------------------------
#那怎么把序列化之后的数据写入到文件当中呢?
c1=Cat("英短","蓝白")                       #造一直英短蓝白的猫
pickle.dump(c1,open("cat.db",mode="wb")) #把一个对象写入文件cat.db

c111=pickle.load(open("cat.db",mode="rb")) #从文件中把一个对象从cat.db文件中读取出来
c111.chi() #解读出来的还是能执行chi()
print(c111.color) #也可查看其属性
print(c111.name)
---------------------------------------------------------------
#那怎么把多个文件序列化后写入文件当中呢?
c1=Cat("英短1","蓝白")                #造出多个对象,很多只猫
c2=Cat("英短2","蓝白")
c3=Cat("英短3","蓝白")
c4=Cat("英短4","蓝白")
c5=Cat("英短5","蓝白")

lst=[c1,c2,c3,c4,c5] #为了方便,把猫装进列表里面
f=open("cats.db",mode="wb") #打开(创建)一个cats.db文件
pickle.dump(lst,f) #把整个列表写入文件中
f.close() #关闭文件


f1=open("cats.db",mode="rb") #打开cats.db文件
lis=pickle.load(f1) #把读取出来的列表赋值给新的列表
for i in lis: #把列表的元素一个一个拿出来
i.chi()
f1.close() #关闭文件
-----------------------------------------------------------------------
注意
1.单单序列化都是不带s的,而序列化后写入文件是要带s的
2.在文件中读写是是wb,rb模式,所以在打开文件的时候不需要设置encoding
3.pickle序列化的内容是⼆进制的内容(bytes) 不是给人看的
例.2
import pickle
class User:
    def __init__(self,username,password):
        self.username=username
        self.password=password
class Client:
    def register(self):
        usn=input("请输入你的用户名")                #注册程序
        psw=input("请输入你的密码")
        u=User(usn,psw)                           #用注册的信息造出一个对象
        pickle.dump(u,open("userinfo",mode="ab"))  把对象写入到userin文件当中, 模式是ab
        print("注册成功")
    def login(self):
        usern=input("请输入你的用户名")                 #登录程序
        psword=input("请输入你的密码")
        f=open("userinfo",mode="rb")            
        while 1:                               #把用户输入的和userinfo的信息进行一一比对
            try:
                u=pickle.load(f)
                if u.username==usern and u.password==psword:
                    print("登录成功")
                    break
            except Exception as e:                  #当userifo里面的信息比对完了,就报错
                print("登录失败")
                break
c=Client()
c.register()
c.register()
c.register()c.register()

c.login()

猜你喜欢

转载自www.cnblogs.com/tjp40922/p/9964724.html
今日推荐