私は文字列解析ライブラリに慣れていません。そして行きたい:
'foo=5 z v xz er bar=" hel o" c z a == "hi" b = "who"'
この解析済み辞書に:
{'foo':5, 'bar': ' hel o', 'a': 'hi', b: 'who'}
しかし、どこから始めればよいかわかりません。この変換を処理するためのアドバイスを教えてください。
私は文字列解析ライブラリに慣れていません。そして行きたい:
'foo=5 z v xz er bar=" hel o" c z a == "hi" b = "who"'
この解析済み辞書に:
{'foo':5, 'bar': ' hel o', 'a': 'hi', b: 'who'}
しかし、どこから始めればよいかわかりません。この変換を処理するためのアドバイスを教えてください。
Pyparsing は、一致する式を少しずつ構築できる解析ライブラリです。
from pyparsing import Word, alphas, alphanums, nums, oneOf, quotedString, removeQuotes
identifier = Word(alphas, alphanums)
integer = Word(nums).setParseAction(lambda t: int(t[0]))
value = integer | quotedString.setParseAction(removeQuotes)
# equals could be '==' or '='
# (suppress it so it does not get included in the resulting tokens)
EQ = oneOf("= ==").suppress()
# define the expression for an assignment
assign = identifier + EQ + value
このパーサーを適用するコードは次のとおりです
# search sample string for matching assignments
s = 'foo=5 z v xz er bar=" hel o" c z a == "hi" b = "who"'
assignments = assign.searchString(s)
dd = {}
for k,v in assignments:
dd[k] = v
# or more simply
#dd = dict(assignments.asList())
print dd
与えます:
{'a': 'hi', 'b': 'who', 'foo': 5, 'bar': ' hel o'}