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'