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'


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM