封裝是一個將Python數據對象轉化爲字節流的過程,拆封是封裝的逆操做,將字節文件或字節對象中的字節流轉化爲Python數據對象,不要從不收信任的數據源中拆封數據。能夠封裝和拆封幾乎任何Python數據對象,主要包括:函數
None , True,False
整數,浮點數,複數
字符串,字節,ByteArray對象
元組,列表,集合,包含可封裝對象的字典
在一個模塊的頂層定義的函數
在一個模塊的頂層定義的內置函數
那是在一個模塊的頂層定義的類
__dict__或調用__getstate__()的結果是可封裝的類的實例spa
pickle模塊中經常使用的方法有:code
1. pickle.dump(obj, file, protocol=None,)對象
必填參數obj表示將要封裝的對象blog
必填參數file表示obj要寫入的文件對象,file必須以二進制可寫模式打開,即「wb」繼承
可選參數protocol表示告知pickler使用的協議,支持的協議有0,1,2,3,默認的協議是添加在Python 3中的協議3, 其餘的協議詳情見參考文檔文檔
2. pickle.load(file,*,fix_imports=True, encoding="ASCII", errors="strict")字符串
必填參數file必須以二進制可讀模式打開,即「rb」,其餘都爲可選參數get
3. pickle.dumps(obj):以字節對象形式返回封裝的對象,不須要寫入文件中it
4. pickle.loads(bytes_object): 從字節對象中讀取被封裝的對象,並返回
pickle模塊可能出現三種異常:
1. PickleError:封裝和拆封時出現的異常類,繼承自Exception
2. PicklingError: 遇到不可封裝的對象時出現的異常,繼承自PickleError
3. UnPicklingError: 拆封對象過程當中出現的異常,繼承自PickleError
pickle應用實例:
代碼以下:
import pickle with open("my_profile.txt", "wb") as myprofile: pickle.dump({"name":"AlwaysJane", "age":"20+", "sex":"female"}, myprofile) with open("my_profile.txt", "rb") as get_myprofile: print (pickle.load(get_myprofile))
import pickle class Profile: name = "AlwaysJane" pickledclass = pickle.dumps(Profile) print (pickledclass) print (pickle.loads(pickledclass))