首页 > 编程语言 > 详细

python pickle

时间:2020-07-05 22:01:00      阅读:42      评论:0      收藏:0      [点我收藏+]

1. pickle

"""
pickle
将python中所有的数据类型(包含set)变成字节串: 序列化过程
将字节串转换成python中数据类型: 反序列化过程
"""


import pickle
bys = pickle.dumps([1, 2, 3])
print(type(bys))
print(bys)


1.1 序列化过程

1.1.1 列表

import pickle
bys = pickle.dumps([1, 2, 3])
print(type(bys))
print(bys)

(venv) C:\work\day16>python pickle_demo.py
<class ‘bytes‘>
b‘\x80\x03]q\x00(K\x01K\x02K\x03e.‘




1.1.2 元组

bys = pickle.dumps((1, 2, 3))  # 元组
print(bys)

#
res = pickle.loads(bys)  # 变回原本的数据类型元组
print(type(res))
#

(venv) C:\work\day16>python pickle_demo.py
b‘\x80\x03K\x01K\x02K\x03\x87q\x00.‘
<class ‘tuple‘>

1.1.3 集合

bys = pickle.dumps(set(‘abc‘))
print(bys)
res = pickle.loads(bys)
print(type(res))

(venv) C:\work\day16>python pickle_demo.py
b‘\x80\x03cbuiltins\nset\nq\x00]q\x01(X\x01\x00\x00\x00bq\x02X\x01\x00\x00\x00aq\x03X\x01\x00\x00\x00cq\x04e\x85q\x05Rq\x06.‘
<class ‘set‘>

1.1.4 在文件中dump

# 从文件中把序列化内容写入
# 当初我们在json中 打开文件的方式是 at  append text模式
# 而我们现在是写入字节 理所当然 更改为 wb, 且二进制不需要encode
with open(‘c.txt‘, mode=‘wb‘) as f:
    pickle.dump([1, 2, 3], f)

技术分享图片

1.1.5 从文件中load 反序列化

# 从文件中反序列化pickle
with open(‘c.txt‘, mode=‘rb‘) as f:
    res = pickle.load(f)
    print(type(res))
    print(res)
    
(venv) C:\work\day16>python pickle_demo.py
<class ‘list‘>
[1, 2, 3]

1.1.6 多次写入取出

# 多次写入到同一个文件中
with open(‘c.txt‘, mode=‘ab‘) as f:
    pickle.dump([1, 2, 3], f)
    pickle.dump([1, 2, 3], f)
    pickle.dump([1, 2, 3], f)

# 从文件中反序列化pickle数据
# for x in f: 不能用 因为这是按行读取,而我看文件中其实只有一行
# 这个不常用, 因为多次写入,多次取出,必须知道写入的人写了几次,但是工作中说不定写的人已经不在或者忘记了
with open(‘c.txt‘, mode=‘rb‘) as f:
    for x in range(4):
        res = pickle.load(f)
        print(res)

1.1.7总结

pickle最常用的场景: 和json一样 一次性写入 一次性读取

2. pickle和json的差异

# json pickle 的比较:
"""
json:
1.不是所有的数据类型都可以序列化
2.不能多次对同一个文件进行序列化 
例: json.dump([1, 2, 3], f)不行 但可以使用 f.write(json.dump([1, 2, 3]))
3. json数据可以跨语言

pickle:
1.所有python类型都能序列化, 结果是字节串
2.可以多次对同一个文件序列化
3.不能跨语言(除了c可能可以, 因为python是用c写的
"""

python pickle

原文:https://www.cnblogs.com/sunnywillow/p/13251933.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!