我需要对类似这样的字符串执行一种反向 .format() 操作
a = "01AA12345AB12345AABBCCDDEE".reverseformat({id:2d}{type:2s}{a:3d}{b:4s}{c:5d}{d:2s})
print a
>>>> {'id':1, 'type':'aa', 'a':'123', 'b':'45AB', 'c':'12345', 'd':'AA'}
我找到了 this lib 几乎满足了我的需要,问题是它给了我这个结果
msg = parse.parse("{id:2d}{type:3S}{n:5S}", "01D1dddffffffff")
print msg.named
>>>>{'type': 'D1dddfffffff', 'id': 1, 'n': 'f'}
不是
{'id':1, 'type':'D1d', 'n':'ddfffff'}
是否存在另一个可以将字符串“解压”为字典的 lib/method/wathever?
编辑:为了澄清,我已经尝试过字符串的 w 和 D 格式规范
请您参考如下方法:
如果您的格式始终相同,有什么理由不能像普通字符串一样对它进行切片?
s = "01D1dddffffffff"
id = s[:2]
type = s[2:5]
n = s[5:]
给出 id、type 和 n 为:
01
D1d
ddffffffff
如果您需要的话,从那里将它转换成字典是微不足道的。如果您的解析不需要是动态的(在当前状态下它似乎不是来自您的问题)那么很容易将切片包装在一个函数中,该函数将提取所有值。
这还有一个好处,即从切片中可以清楚地知道要提取的字符串中有多少个字符和什么位置,但在解析格式化程序中,位置都是相对的(即查找哪些字符 n extracts 表示计算 id 和 type 消耗了多少字符。
