1. 介紹
1.1 介紹
福哥在用Python去讀PHP語言開發的項目的資料庫的時候,發現一些欄位里存儲的居然是經過PHP的serialize函數序列化過的數據,這個要解開它通過json庫是不行的了,怎麼辦呢?
原來Python專門有個庫用來模擬PHP語言的serialize和unserialize的功能,它就是phpserialize庫。
2. 安裝
phpserialize庫可以直接通過pip進行安裝。
pip3 install phpserialize
3. 使用
3.1 序列化
使用phpserialize庫序列化一個結構轉化為一個字元串用到的是dumps方法,用法和json庫類似,區別是編碼參數不是encoding是charset。
user = {
'id': 35,
'name': "福哥",
'abilities': [
"PHP",
"Java",
"Python",
"JavaScript",
"C/C++",
"Asp.net"
]
}
print("原始數據:")
print(user)
print("序列化數據:")
userSN = phpserialize.dumps(user, charset="utf-8")
print(userSN)

可以看到序列化的結果和PHP的serialize基本一致。因為福哥設置的編碼的UTF-8的,所以「福哥」佔用了6個字元。
4. 反序列化
使用phpserialize庫反序列化一個序列化字元串得到原始數據結構用的是loads方法,用法和json庫基本一樣,同樣編碼參數也是charset而不是我們想像的encoding。
userSN = b"a:3:{s:2:"id";i:35;s:4:"name";s:6:"xe7xa6x8fxe5x93xa5";s:9:"abilities";a:6:{i:0;s:3:"PHP";i:1;s:4:"Java";i:2;s:6:"Python";i:3;s:10:"JavaScript";i:4;s:5:"C/C++";i:5;s:7:"Asp.net";}}"
print("序列化數據:")
print(userSN)
print("原始數據:")
user = phpserialize.loads(userSN, charset="utf-8")
print(user)

反序列化的時候最好也加上編碼參數,避免以默認編碼反序列化出現錯誤的情況。
5. 總結
福哥今天帶著童鞋們學習了Python的phpserialize庫的使用方法,通過phpserialize庫可以讓Python語言擁有解析PHP的序列化數據的能力。
原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/208816.html