我该如何阅读输入数据?

时间:2010-08-14 04:12:12

标签: python

例如,我有以下输入数据:

((12 3)42)

我想处理输入数据的每个整数值。这是一般输入数据表示的一个例子。

仅供参考:

这样的表示对应于带有标记叶子的二叉树:

   /\
  /\ 42
 12 3

4 个答案:

答案 0 :(得分:3)

我建议pyparsing用于此解析任务 - here,例如,是一个基于pyparsing的S表达式解析器......可能比你需要的更丰富,更强大,但是对Python和pyparsing的理解非常有限,你可以根据需要简化它(如果有的话 - 它已经完全能够执行你的任务,作为它涵盖的更广泛集的一部分; - )。

答案 1 :(得分:1)

我写了这个脚本。这可能会有所帮助

import tokenize,StringIO
def parseNode(tokens):
    l = []
    while True:
        c = next(tokens)
        if c[1] == '(':
            l.append(parseNode(tokens))
        elif c[1] == ')':
            return l
        elif c[0] == tokenize.NUMBER:
            l.append(int(c[1]))
def parseTree(string):
    tokens = tokenize.generate_tokens(StringIO.StringIO(string).readline)
    while next(tokens)[1] != '(' : pass
    return parseNode(tokens)
print parseTree('(( 12 3 ) 42 15 (16 (11 2) 2) )')

答案 2 :(得分:0)

here是您可以使用的良好资源列表。我建议PLY

答案 3 :(得分:0)

以下内容应该有效:

import re
newinput = re.sub(r"(\d) ", r"\1, ", input)
newinput = re.sub(r"\) ", r"), ", newinput)
eval(newinput)