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包介绍:numpy_UQI-LIUWJ的博客-CSDN博客  第五小节

以上是关于python 笔记 pickle & json的主要内容,如果未能解决你的问题,请参考以下文章

Python学习笔记

python pickle 模块

Python3-笔记-E-007-库-序列号pickle

python之json&pickle

Python初学——pickle & set

python序列化: json & pickle & shelve 模块