что-то не так с использованием pyparsing - PullRequest
2 голосов
/ 21 августа 2011

Я написал это, чтобы разобрать мой собственный файл .dotf:

def parseFromDOTF(file_path):
    comment = "%" + restOfLine
    typeToken = CaselessKeyword("@TYPE")
    attrToken = CaselessKeyword('@ATTRIBUTE')
    ident = Word(alphas,alphanums)
    type = Suppress(typeToken) + ident
    columnList = Group(delimitedList(nums))
    attribute = Group(Suppress(attrToken) + ident("attribute") + columnList("column"))
    DOTF = type('type') + OneOrMore(attribute)("attributes")
    DOTF.ignore(comment)
    return DOTF.parseFile(file_path)

ниже приведен пример файла .dotf

%a comment  
@TYPE NORMAL
@ATTRIBUTE id 0
@ATTRIBUTE values 1,2,3,4
@ATTRIBUTE class 5

но с этим что-то не так:

pyparsing.ParseException: Expected "0123456789" (at char 79), (line:3, col:15)

15-й столбец строки 3 - это пробел, не так ли?

так, что не так?

спасибо!

1 Ответ

3 голосов
/ 21 августа 2011

nums соответствует строке '0123456789'.Таким образом, определение

columnList = Group(delimitedList(nums))

говорит pyparsing, что columnList должен быть списком строк, разделенных запятыми, с каждой строкой буквально равной '0123456789'.

.список «слов» с разделителями, состоящий из символов строки nums, используйте Word(nums):

integer = Word(nums)
columnList = Group(delimitedList(integer))
...