python 笔记 pickle & json
Posted UQI-LIUWJ
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 笔记 pickle & json相关的知识,希望对你有一定的参考价值。
1 数据序列化
文件系统,机器学习,大数据等,都少不了数据文件。Python 提供了一些比较方便序列化的存储的组件。
什么是序列化(Serialization)呢,就是把像字典,列表这类的数据,打包保存在电脑硬盘中。
2 pickle
2.1 序列化成一串字节
import pickle
data = ['Shanghai','浦东新区','20211206']
pickle.dumps(data)
'''
b'\\x80\\x03]q\\x00(X\\x08\\x00\\x00\\x00Shanghaiq\\x01X\\x0c\\x00\\x00\\x00\\xe6\\xb5\\xa6\\xe4\\xb8\\x9c\\xe6\\x96\\xb0\\xe5\\x8c\\xbaq\\x02X\\x08\\x00\\x00\\x0020211206q\\x03e.'
'''
可以看到这个字典被 pickle 以后,已经面目全非,你不能直接读出来里面的信息,因为这些信息已经被编码了。
所以当你在用 pickle 进行序列化的时候,需要考虑你需不需要能看懂被打包的数据,如果没有这个需求,那你就可以用 pickle。有的话,建议使用后面将要涉及的json。
2.2 序列化成一个文件
import pickle
data = ['Shanghai','浦东新区','20211206']
f=open('data.pkl','wb')
pickle.dump(data,f)
f.close()
注意这里一定要是'wb‘,如果是'w'的话,会报如下的错误:
TypeError: write() argument must be str, not bytes
但是这个data.pkl的文件,人是没法直接看懂的:
2.3 反序列化文件
f1=open('data.pkl','rb')
data=pickle.load(f1)
data
'''
['Shanghai', '浦东新区', '20211206']
'''
'''
对比一下直接read:
'''
f=open('data.pkl','rb')
f.read()
'''
b'\\x80\\x03]q\\x00(X\\x08\\x00\\x00\\x00Shanghaiq\\x01X\\x0c\\x00\\x00\\x00\\xe6\\xb5\\xa6\\xe4\\xb8\\x9c\\xe6\\x96\\xb0\\xe5\\x8c\\xbaq\\x02X\\x08\\x00\\x00\\x0020211206q\\x03e.'
'''
3 json
Python 中的 json 库,就是来处理 json 形式的数据的。
一般来说,Python 里的字典,列表都可以是 json 数据格式。
3.1 用json 序列化
import json
data = ['Shanghai','浦东新区','20211206']
j = json.dumps(data)
print(j)
print(type(j))
'''
["Shanghai", "\\u6d66\\u4e1c\\u65b0\\u533a", "20211206"]
<class 'str'>
'''
相比于pickle,json序列化之后的内容是可读的,变成了一个字符串形式的列表
3.2 序列化至文件
大体用法和pickle一致
import json
data = ['Shanghai','浦东新区','20211206']
f=open('data.json','w')
json.dump(data,f)
f.close()
相比于pickle,内容是可读的
3.3 反序列化文件
大体用法和pickle一致
f=open('data.json','r')
json.load(f)
'''
['Shanghai', '浦东新区', '20211206']
'''
'''
对比一下read
'''
f=open('data.json','r')
f.read()
'''
'["Shanghai", "\\\\u6d66\\\\u4e1c\\\\u65b0\\\\u533a", "20211206"]'
'''
4 pickle和json的比较
5 其他序列化
numpy 有专门的 npz格式文件,见:
以上是关于python 笔记 pickle & json的主要内容,如果未能解决你的问题,请参考以下文章