本文的文字及圖片來源于網路,僅供學習、交流使用,不具有任何商業用途,著作權歸原作者所有,如有問題請及時聯系我們以作處理
以下文章來源于騰訊云 作者:Python小屋屋主
( 想要學習Python?Python學習交流群:1039649593,滿足你的需求,資料都已經上傳群檔案流,可以自行下載!還有海量最新2020python學習資料, )
使用Python標準庫struct序列化Python整數、實數、位元組串時,需要使用struct模塊的pack()函式把物件按指定的格式進行序列化,然后使用檔案物件的write()方法將序列化的結果位元組串寫入以’wb’或’ab’模式打開的二進制檔案,讀取時需要使用檔案物件的read()方法從以’rb’模式打開的二進制檔案中讀取指定數量的位元組串,然后再使用struct模塊的unpack()函式反序列化得到原來物件息,如果需要的話,可以使用calcsize()函式計算指定型別序列化時所需要的位元組數量,標準庫struct中常用的函式及功能下表所示,
表 標準庫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支持的格式
例 撰寫程式,對若干不同的值進行序列化并寫入二進制檔案,然后讀取這個二進制檔案中的資料進行還原,
決議:程式中的格式字串’if?i56si64si64s’對應1個整數、1個實數、1個bool值、1個整數(表示后面緊鄰的56個位元組中有效位元組的數量)、1個位元組串(實際長度為56個位元組,其中只有前面一部分是有效位元組,后面是填充符)、1個整數(表示后面緊鄰的64個位元組中有效位元組的數量)、1個位元組串(實際長度為64個位元組,其中只有前面一部分是有效位元組,后面是填充符)、1個整數(表示后面緊鄰的64個位元組中有效位元組的數量)、1個位元組串(實際長度為64個位元組,其中只有前面一部分是有效位元組,后面是填充符)進行序列化,通過內置函式str()可以把任意Python物件轉換為字串然后再使用encode()方法轉換為位元組串最后使用struct進行序列化,在網路編程使用socket傳輸資料時經常用到struct序列化和反序列化,
運行結果:
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/233787.html
標籤:Python
