python3 pickle模块(序列化和反序列化)

import pickle


"""将对象转化为硬盘能识别的bytes的过程被称为序列号。pickle可以把任意python类型的数据转化为字节"""

print(pickle.dumps("")) print(type(pickle.dumps(""))) print(pickle.dumps([4, 2, 1])) print(type(pickle.dumps([4, 2, 1])))
b'\x80\x03X\x03\x00\x00\x00\xe4\xb8\xadq\x00.' 
<class 'bytes'>
b'\x80\x03]q\x00(K\x04K\x02K\x01e.'
<class 'bytes'>

import pickle


"""将bytes转化为python对象的过程被称为反序列化"""
print(pickle.loads(b'\x80\x03X\x03\x00\x00\x00\xe4\xb8\xadq\x00.'))
print(type(pickle.loads(b'\x80\x03X\x03\x00\x00\x00\xe4\xb8\xadq\x00.')))

print(pickle.loads(b'\x80\x03]q\x00(K\x04K\x02K\x01e.'))
print(type(pickle.loads(b'\x80\x03]q\x00(K\x04K\x02K\x01e.')))
中
<class 'str'>
[4, 2, 1]
<class 'list'>

import pickle


print(pickle.dumps([4, 2, 1]))  # 序列化
print(pickle.loads(b'\x80\x03]q\x00(K\x04K\x02K\x01e.'))  # 反序列化
b'\x80\x03]q\x00(K\x04K\x02K\x01e.'
[4, 2, 1]


import pickle


"""将序列化后的bytes写入文件"""
pickle.dump("", open("str2.dat", "wb"))
pickle.dump([4, 2, 1], open("lst.dat", "wb"))

 

import pickle


"""读取文件中的bytes"""
print(pickle.load(open("str2.dat", "rb")))
print(pickle.load(open("lst.dat", "rb")))
中
[4, 2, 1]

import pickle


pickle.dump([1, 2, 3], open("lst.bytes", "wb"))  # 把任意类型的数据转化为字节,并保存到文件中

print(pickle.load(open("lst.bytes", "rb")))  # 从文件中读取字节数据,并转换为对应的python数据
[1, 2, 3]

"""只有字符串类型的转化为字节使用encode"""
print([4, 2, 1].encode("utf-8"))
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-134-f5e7d7f2d811> in <module>()
      1 """只有字符串类型的转化为字节使用encode"""
----> 2 print([4, 2, 1].encode("utf-8"))

AttributeError: 'list' object has no attribute 'encode'

 

import pickle


"""encode和pickle.dumps的对字符串进行转字节结果是不一样的。"""
print(pickle.dumps(""))
print("".encode("utf-8"))
b'\x80\x03X\x03\x00\x00\x00\xe4\xb8\xadq\x00.'
b'\xe4\xb8\xad'
posted on 2019-04-28 14:24  lilyxiaoyy  阅读(972)  评论(0编辑  收藏  举报

返回
顶部