本文的文字及圖片來源於網絡,僅供學習、交流使用,不具備任何商業用途,版權歸原做者全部,若有問題請及時聯繫咱們以做處理python
如下文章來源於騰訊雲 做者:Python小屋屋主編程
( 想要學習Python?Python學習交流羣:1039649593,知足你的需求,資料都已經上傳羣文件流,能夠自行下載!還有海量最新2020python學習資料。 )
網絡
使用Python標準庫struct序列化Python整數、實數、字節串時,須要使用struct模塊的pack()函數把對象按指定的格式進行序列化,而後使用文件對象的write()方法將序列化的結果字節串寫入以’wb’或’ab’模式打開的二進制文件。讀取時須要使用文件對象的read()方法從以’rb’模式打開的二進制文件中讀取指定數量的字節串,而後再使用struct模塊的unpack()函數反序列化獲得原來對象息。若是須要的話,可使用calcsize()函數計算指定類型序列化時所須要的字節數量。標準庫struct中經常使用的函數及功能下表所示。socket
表 標準庫struct中的經常使用函數
struct模塊支持多種類型的數據序列化,表9-3中函數參數format可取的值以下表所示。這些格式能夠組合使用,對多個數據同時序列化,例如struct.pack(‘ii’, 345, 123)表示把兩個整數345和123序列化爲一個字節串,結果爲b’Y\x01\x00\x00{\x00\x00\x00’。函數
另外,format可使用第一個字符來指定序列化時使用的字節順序、長度和對齊方式,不指定時默認值@會根據須要自動進行字節填充和對齊。例如,struct.pack(‘i?’, 3, True)的值爲b’\x03\x00\x00\x00\x01’,長度爲5個字節,而struct.pack(’?i’, True, 3)的值爲b’\x01\x00\x00\x00\x03\x00\x00\x00’,長度爲8個字節。能夠設置format第一個字符爲<、>或=,這時不會自動進行字節填充和對齊,要注意的是pack()函數的format參數和對應的unpack()函數的format參數使用的字節順序和對齊方式要一致。學習
表 struct支持的格式
例 編寫程序,對若干不一樣的值進行序列化並寫入二進制文件,而後讀取這個二進制文件中的數據進行還原。code
解析:程序中的格式字符串’if?i56si64si64s’對應1個整數、1個實數、1個bool值、1個整數(表示後面緊鄰的56個字節中有效字節的數量)、1個字節串(實際長度爲56個字節,其中只有前面一部分是有效字節,後面是填充符)、1個整數(表示後面緊鄰的64個字節中有效字節的數量)、1個字節串(實際長度爲64個字節,其中只有前面一部分是有效字節,後面是填充符)、1個整數(表示後面緊鄰的64個字節中有效字節的數量)、1個字節串(實際長度爲64個字節,其中只有前面一部分是有效字節,後面是填充符)進行序列化。經過內置函數str()能夠把任意Python對象轉換爲字符串而後再使用encode()方法轉換爲字節串最後使用struct進行序列化,在網絡編程使用socket傳輸數據時常常用到struct序列化和反序列化。
運行結果:
orm