python - 使用格式模式将字符串反序列化为值

标签 python serialization format

我正在尝试为(反)序列化器找到一个好的解决方案。 我有一个格式模式和所有要输入的值。

格式模式如下:

msg = '$bla,%d,%02d,%02d %02d:%02d:%02d.%03d' % (kwargs['...'], ...)

当我序列化这些值时,我得到以下字符串:

bla,1990,12,24 13:37:11.001

但我还必须反序列化它。该图案的长度和类型可能有很大差异。 我想仅根据格式模式反序列化字符串。

有什么想法可以实现这一点吗?

编辑:我正在使用 Python 2.7.6

最佳答案

如果您可以完全控制协议(protocol),或者说序列化后格式化,我建议使用一些现有的解决方案,例如 Pickle由Python标准库提供,Json在网络上很流行,或者Protobuf这是 Google 提供的跨语言

Pickle :

>>> import pickle
>>> formattuple = (1990,12,24,13,37,11,1) 
>>> s = pickle.dumps(formattuple)
>>> s
'(I1990\nI12\nI24\nI13\nI37\nI11\nI1\ntp0\n.'
>>> pickle.loads(s)
(1990, 12, 24, 13, 37, 11, 1)

Json :

>>> import json
>>> formattuple = (1990,12,24,13,37,11,1)
>>> s = json.dumps(formattuple)
>>> s
'[1990, 12, 24, 13, 37, 11, 1]'
>>> json.loads(s)
[1990, 12, 24, 13, 37, 11, 1]

请注意,json 有一些限制,例如序列化和反序列化除 dict、list 和 tuple 之外的对象有点困难。并且不会反序列化为完全相同的格式,因为 json 中不存在某些数据结构(例如元组)

Protobuf是一个更强大但更复杂的解决方案。您需要首先定义数据模式。

关于python - 使用格式模式将字符串反序列化为值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22199948/

相关文章:

c# - 将对象转换为泛型

c# - 时间(日期时间)格式有条件地显示分钟

python - Cron 作业无法使用 admin_required 装饰器访问 url

python - BYTE 到 python C 类型结构转换问题

python - 为纯 Python 包构建发行版的意义何在?

python - 如何根据 Python 中的日期(而不是当前语言环境)将 DateTime 转换为夏令时

php - Symfony 中的序列化和反序列化

javascript - 将 JS 对象字符串化为 JSON(将函数字符串化为属性)

c++ - 如何格式化此输出 C++

r - ggplot2 : altering x and y grid lines 中的主题操作