我使用pyparsing來解析下輸入:在pyparsing中,如何格式化嵌套的字典輸出?
%FSLAX45Y67*%
輸出格式我之後,在字典的形式,就是:
{
'notation': 'absolute',
'zeros': 'leading',
'x': {
'integer': 4,
'decimal': 5
},
'y': {
'integer': 6,
'decimal': 7,
},
'gerber-command': 'FS'
}
目前我得到的輸出是:
{
'notation': 'absolute',
'decimal': 6,
'zeros': 'leading',
'integer': 6,
'y': ([6, 6], {'integer': [(6, 0)], 'decimal': [(6, 1)]}),
'x': ([6, 6], {'integer': [(6, 0)], 'decimal': [(6, 1)]}),
'gerber-command': 'FS'
}
(請注意,我的問題不是如何使輸出看起來正確,而是如何讓pyparsing安排我想要的數據。)
用下面的代碼:
single_digit = pyp.Regex(r'(\d)').setParseAction(lambda t: int(t[0]))
cmd_format = pyp.Literal('FS')
cmd_format_opt_leading_zeros = pyp.Literal('L').setParseAction(pyp.replaceWith('leading'))
cmd_format_opt_trailing_zeros = pyp.Literal('T').setParseAction(pyp.replaceWith('trailing'))
format_zeros = ((cmd_format_opt_leading_zeros('zeros')) |
(cmd_format_opt_trailing_zeros('zeros')))
format_notation = ((cmd_format_opt_absolute('notation')) |
(cmd_format_opt_incremental('notation')))
format_data = (single_digit)('integer') + single_digit('decimal')
gformat = (inst_del +
cmd_format('gerber-command') +
format_zeros +
format_notation +
'X' + (format_data)('x') +
'Y' + (format_data)('y') +
inst_end +
inst_del)
(一些瑣碎的定義中省略)。有什麼建議麼?
你的第一個建議讓我更接近,但仍有一些「殘留」:{'y':([4,3],{'integer':[(4,0)],'decimal':[(3,1 )]),'x':([6,5],{'integer':[(6,0)],'decimal':[(5,1)]}),'zeros':'leading' ,'notation':'絕對','gerber-command':'FS'} –
您看到的'殘留'只是嵌套的ParseResults的repr輸出。嘗試使用已定義的名稱訪問結果:result.notation,result.x.integer,result.y.integer,result.x.decimal等。result.dump()的外觀如何? – PaulMcG
result.dump()看起來不錯。我想我期望.asDict()輸出看起來完全像一本字典,我想不是這種情況,這非常好。 –