码迷,mamicode.com
首页 > 其他好文 > 详细

模块:序列化

时间:2019-08-29 17:53:22      阅读:98      评论:0      收藏:0      [点我收藏+]

标签:通用   利用   line   打印   通过   用法   open   使用   lin   

序列化:
数据类型转换成一个字符串数据类型
反序列化:
字符串数据类型转换为数据类型
三个模块可以实现:json pickle shelve
json是所有语言通用的,但仅能转换列表、字典、数字、字符串和元祖:
dumps:数据类型转换成字符串数据类型
loads:字符串数据类型转换成数据类型
import json
lis = [aike,demo,cool,onedd]
lis1 = json.dumps(lis)
print(lis1,type(lis1))#字符串类型
lis2 = json.loads(lis1)
print(lis2,type(lis2))#列表

#打印:
["aike", "demo", "cool", "onedd"] <class str>
[aike, demo, cool, onedd] <class list>

dump:数据类型转换成字符串数据类型后转入文件
lis = [aike1,demo,cool,onedd]
with open(fifl,w,encoding=utf-8) as f:
    json.dump(lis,f)#无返回值,已经写入到文件

 

load:将文件中的数据类型转换成字符串数据类型,不改变原文件内容
f1 = open(fifl,r,encoding=utf-8)
ret = json.load(f1)
print(type(ret),ret)#列表
f1.close()

#打印:
<class list> [aike1, demo, cool, onedd]

 

json当中,dump和load只能一行一行写入或读取,所以可以利用dumps、loads和文件循环的方式写入或读取.
lis = [{aike:1},{demo:2},{cool:3},{onedd:4}]
for i in lis:
    dic = json.dumps(i)#逐个序列化
    with open(fi,a,encoding=utf-8) as f:
        f.write(dic+\n)#将序列化的字典主动写入文件,一个字典一行
lis = []
with open(fi,r,encoding=utf-8) as f:
    for line in f:
       lis.append(json.loads(line.strip()))#逐个将反序列化的字典加入到列表中
print(lis)

#打印:
[{aike: 1}, {demo: 2}, {cool: 3}, {onedd: 4}]

pickle
是python用的,支持python当中的所有数据类型,用法与json一样
import pickle
lis = [aike,demo,cool,onedd]
ret = pickle.dumps(lis) #返回的是bytes数据类型的内容
print(ret,type(ret))
ret1 = pickle.loads(ret)
print(ret1)

#打印:
b\x80\x03]q\x00(X\x04\x00\x00\x00aikeq\x01X\x04\x00\x00\x00demoq\x02X\x04\x00\x00\x00coolq\x03X\x05\x00\x00\x00oneddq\x04e. <class bytes>
[aike, demo, cool, onedd]

 

但序列化后返回的bytes数据类型,所以文件操作需要使用wb,rb模式,切拥有记忆,能够写多条数据,能够取对应的多条数据
lis = [aike,demo,cool,onedd]
lis2 = [aike2,demo2,cool2,onedd2]
with open(fixx,wb) as f:
    ret3 = pickle.dump(lis,f) #能够写多条数据
    ret4 = pickle.dump(lis2,f)
with open(fixx,rb) as f:
    ret3 = pickle.load(f)
    ret4 = pickle.load(f) #能够取对应多条的数据
    print(ret3)
    print(ret4)

#打印:
[aike, demo, cool, onedd]
[aike2, demo2, cool2, onedd2]

shelve
是通过序列化句柄操作的
import shelve
f = shelve.open(she)
f[key] = {aike:1},{demo:2},{cool:3},{onedd:4} #直接通过文件句柄存入数据
f.close()

f = shelve.open(she)
ret = f[key] #直接通过‘key’就可以直接读取文件,若‘key’不存在会报错
print(ret)

 



模块:序列化

标签:通用   利用   line   打印   通过   用法   open   使用   lin   

原文地址:https://www.cnblogs.com/aizhinong/p/11430970.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!