我有一个字符串product: Netatalk version: 2.2.0 extrainfo: name: WNDR4500; protocol 3.3 ostype: Unix
,我希望能够进行类似字典的操作,以获得产品,版本等等。这些操作的最佳方法是什么?我知道我可以用分裂和类似的东西来解决这个问题,但这实际上并不是一种“漂亮”的编码方式。有什么建议吗?
答案 0 :(得分:1)
我尝试写一个递归的字典解析器,它一直在踢我的屁股,直到我想到你知道,如果我倒退了会更容易...... Voila!
import re
def make_dict(s):
# break into list of keys and values
chunks = re.split("\s*(\w+\:)\s*", s)
res = {}
# work backwards in value,key pairs
args = [reversed(chunks)] * 2
for value,key in zip(*args):
key = key.rstrip(':')
if value:
# add to current result-dict
res[key] = value
else:
# start a higher-level result-dict
res = {key: res}
return res
然后
>>> make_dict("product: Netatalk version: 2.2.0 extrainfo: name: WNDR4500; protocol 3.3 ostype: Unix")
{'extrainfo': {'ostype': 'Unix', 'name': 'WNDR4500; protocol 3.3'},
'version': '2.2.0',
'product': 'Netatalk'}
答案 1 :(得分:0)
我设法自己解决了这个问题:
def product(banner):
if banner:
p=re.search('(product:).([^\s]+)', banner)
return p.group(2)
else:
return "unknown"
这将返回"产品",如果我需要别的东西,可以进行调整。