2024-04-25 00:56:26 发布
网友
全部
我找到了一段代码来解析简单的ARFF文件,我想把它改成适合稀疏的ARFF,其数据如下:
@data {0 12,4 37,8 First,20 'Some Thing'} {0 12,13 First,28 'Some Thing'}
代码如下:
但它不起作用
我想我必须告诉程序来识别这个wihtespace,但我不知道怎么做
非常感谢
不,不,不!pyparsing的一个重要部分是“发生空白”!除非您正在对基于缩进的解析或面向行的数据执行一些复杂的操作,否则不要在解析器定义中使用空白。在
你的问题是你定义的数据列表与你给它的列表不匹配。列表中的每个逗号分隔项都是一对值,似乎允许使用数字或带引号的字符串。因此,将数据列表定义为:
dataCell = realNum|ident|quotedString dataList = Suppress('{') + Group( delimitedList(Group(dataCell + dataCell))) + Suppress('}')
其他一些信息:
没有必要将arffFormat转发声明为forward()。只有当数据将嵌套在递归结构(即包含子数据的数据)中时,才需要这样做。您的示例没有这个功能,只需在末尾用arffFormat = (...etc.
arffFormat = (...etc.
x.setResultsName('name')已被简单的x('name')替换,真正清理解析器代码
x.setResultsName('name')
x('name')
您定义了一个reanum(它需要一个小数点),但是示例中只有整数。我不再构建reanum类型的表达式,而是使用本地化的regex:realNum = Regex(r"[+-]?\d+(\.\d*)?([Ee][+-]?\d+)?")将提供一个接受整数或实数的表达式。这也允许你删除其他分散注意力的元素,比如arithSign。
realNum = Regex(r"[+-]?\d+(\.\d*)?([Ee][+-]?\d+)?")
你也可能在结果名称上做得太过火了。我认为这将使您对数据有一个很好的了解,并在最后给出一个非常简单的导航结构:
不,不,不!pyparsing的一个重要部分是“发生空白”!除非您正在对基于缩进的解析或面向行的数据执行一些复杂的操作,否则不要在解析器定义中使用空白。在
你的问题是你定义的数据列表与你给它的列表不匹配。列表中的每个逗号分隔项都是一对值,似乎允许使用数字或带引号的字符串。因此,将数据列表定义为:
其他一些信息:
没有必要将arffFormat转发声明为forward()。只有当数据将嵌套在递归结构(即包含子数据的数据)中时,才需要这样做。您的示例没有这个功能,只需在末尾用
定义arffFormatarffFormat = (...etc.
x.setResultsName('name')
已被简单的x('name')
替换,真正清理解析器代码您定义了一个reanum(它需要一个小数点),但是示例中只有整数。我不再构建reanum类型的表达式,而是使用本地化的regex:
realNum = Regex(r"[+-]?\d+(\.\d*)?([Ee][+-]?\d+)?")
将提供一个接受整数或实数的表达式。这也允许你删除其他分散注意力的元素,比如arithSign。你也可能在结果名称上做得太过火了。我认为这将使您对数据有一个很好的了解,并在最后给出一个非常简单的导航结构:
^{pr2}$相关问题 更多 >
编程相关推荐