序列号模块

#序列化模块

**序列化的本质就是将一种数据结构(如字典、列表)等转换成一个特殊的序列(字符串或者bytes)的过程就叫做序列化。**

序列化模块总共只有两种用法,要不就是用于网络传输的中间环节,要不就是文件存储的中间环节

#json模块

  • json模块是将满足条件的数据结构转化成特殊的字符串,并且也可以反序列化还原回去。

#dumps、loads

  • 用于网络传输,列表字典等于字符串之间的类型转换

  • json.dumps()  #序列化   将列表或字典转换成字符串
    json.loads()  #反序列   将字符串转换返回成原类型
    
  • 列表

    lst = [1,"asd",2,"asdcvccc"]
    print(type(lst),json.dumps(lst),type(json.dumps(lst)))
    >>><class 'list'> [1, "asd", 2, "asdcvccc"] <class 'str'>
    ###将列表转换成字符串
    print(type(json.dumps(lst)),json.loads(json.dumps(lst)),type(json.loads(json.dumps(lst))) )
    >>><class 'str'> [1, 'asd', 2, 'asdcvccc'] <class 'list'>
    ###将字符串转换成原类型列表
    
  • 带汉字的字符串

    a = "asdcchhh123李"
    print(json.dumps(a))
    >>>"asdcchhh123u674e"
    print(json.dumps(a,ensure_ascii=False))
    >>>"asdcchhh123李"  #当有汉字时,必须得加ensure_ascii=False
    
  • 字典

    lst = {"daye":"李晨浩"}
    print(json.dumps(lst,ensure_ascii=False),type(json.dumps(lst,ensure_ascii=False)))
    >>>{"daye": "李晨浩"} <class 'str'>
    ###将字典转换成字符串
    print(json.loads(json.dumps(lst,ensure_ascii=False)),type(json.loads(json.dumps(lst,ensure_ascii=False))))
    >>>{'daye': '李晨浩'}{'daye': '李晨浩'} <class 'dict'>
    ###将字符串转换成原类型字典
    

#dump 、load

  • 用于文件写读,但是对于json序列化,存储多个数据到一个文件中是有问题的,默认一个json文件只能存储一个json数据,但是也可以用dumps、loads解决

  • 文件写 json.dumps()

    dic1 = {'name':'爸爸'}
    dic2 = {'age':"1811111111111111111"}
    with open("josn","a",encoding="utf-8") as f1:
        f1.write(json.dumps(dic1)+'
    ')
        f1.write(json.dumps(dic2)+'
    ') 
    
  • 文件读 json.loads()

    with open("josn","r",encoding="utf-8") as f2:
        for i in f2:
            print(json.loads(i))
    

#序列化时间

import json
from json import JSONEncoder
from datetime import datetime
class Com(JSONEncoder):
    def default(self, obj):
        if isinstance(obj,datetime):
            return obj.strftime('%Y-%m-%d %H:%M:%S')
        else:
            return super(ComplexEncoder,self).default(obj)
d = {'name':'alex','data':datetime.now()}
print(json.dumps(d,cls=Com))

#pickle模块

  • pickle模块是将Python所有的数据结构以及对象等转化成bytes类型,然后还可以反序列化还原回去

#dumps、loads

  • 用于网络传输

    pickle.dumps()    #转换成bytes类型
    pickle.loads()    #由bytes类型转换成原格式
    
  • dic = {'k1' : 'Lichenhap'}
    print(pickle.dumps(dic))
    >>>b'x80x03}qx00Xx02x00x00x00k1qx01X	x00x00x00Lichenhapqx02s.'
    ###转换成bytes类型
    print(pickle.loads(pickle.dumps(dic)))
    >>>{'k1': 'Lichenhap'}
    ###由bytes类型转换成原类型字典
    

#dump、load

  • 用于文件写读

    pickle.dump  文件写操作
    pickle.load   文件读操作
    
  • pickle.dump  文件写操作
    pickle.load   文件读操作
    lst = [111,"lichenhao","李晨浩"]
    with open("txt","ab") as f:   
        pickle.dump(lst,f)
    ###注意,因为这里转换成字节了,所以文件的操作模式必须是ab
    with open("txt","rb") as f1:
        print(pickle.load(f1))
    ###将文件内容读取
    

原文地址:https://www.cnblogs.com/Nayears/p/12166619.html