1.介绍1.1简介富哥在用Python读取PHP开发的一个项目的数据库时,发现有些字段其实是PHP的serialize函数序列化的数据。通过json库是不可能解决这个问题的。我该怎么办?原来Pyth
1.1简介
富哥在用Python读取PHP开发的一个项目的数据库时,发现有些字段其实是PHP的serialize函数序列化的数据。通过json库是不可能解决这个问题的。我该怎么办?
原来Python有一个专门的库来模拟PHP语言的serialize和Serialize的功能,它就是phpserialize库。
2.装置phpserialize库可以通过pip直接安装。
pip3 install phpserialize
使用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中序列化的结果基本相同。因为富哥设置的编码是UTF-8,“富哥”占了6个字符。
4.反序列化使用phpserialize library反序列化一个序列化的字符串得到原始的数据结构使用的是loads方法,基本上和json库是一样的。同样,编码参数是charset而不是我们想象的编码。
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序列化数据的能力。