序列化模块

序列化:得到一个字符串的结果过程是序列化

json模块

import json
dic={'k1':'v2','k2':'v2'}
ret=json.dumps(dic)
print(ret,type(ret))
dic1=json.loads(ret)
print(dic1,type(dic1))
with open("json.txt","w") as f:
    json.dump(dic,f)

with open('json.txt','r')as f1:
    c=json.load(f1)
print(c)

json模块的限制:

  json格式的key必须是字符串数据类型

  如果key为数字,dump之后会强转为字符串数据类型

  对元组做value的字典会把元组强转成list类型,且不支持元组做key

  可以对数据进行多次dump,但是不能load出来。

  想dunp多个数据进入文件,只能用dumps,用loads反序列化

  中文格式dumps的第二个数据为ensure_ascii=false

  set不能被dump dumps

pickle模块

dump的结果是bytes,dump用的f文件句柄需要以wb格式打开,load需要rb

支持几乎所有的对象序列化

对于对象的序列化需要这个对象的应用类存在内存中

对于多次dump/load的操作进行了量高的处理

import pickle
lst=[1,2,3,4]
dic={1:2}
se=(1,2,3)
with open('2.txt',mode='wb')as f:
    pickle.dump(lst,f)
    pickle.dump(dic, f)
    pickle.dump(se, f)

with open('2.txt',mode='rb')as f:
    while True:
        try:
            print(pickle.load(f))
        except EOFError:
            break

shelve模块

import shelve
f = shelve.open('shelve_demo')
f['key'] = {'k1':(1,2,3),'k2':'v2'}
f.close()

f = shelve.open('shelve_demo')
content = f['key']
f.close()
print(content)

  shelve模块,写定一个文件,改动比较少,读文件操作比较多

  且大部分读取都需要基于某个key值来获取某个value值

原文地址:https://www.cnblogs.com/wszxdzd/p/9445447.html