是否有任何框架支持文件格式嗅探使用声明性,模糊模式和/或有效格式的语法定义?我正在寻找一些可以处理脏或格式不正确的文件的东西,可能跨多个版本的文件格式定义/模式,并且可以很容易地编写基于规则或基于模式的嗅探器,从而基于内省对文件类型进行最佳猜测。可扩展工具包或从杂乱数据中嗅探文件格式的方法?
我在寻找的东西的声明,允许你定义的格式描述性的,可能是DSL,是这样的:
format A, v1.0:
is tabular
has a "id" and "name" column
may have a "size" column
with integer values in 1-10 range
is tab-delimited
usually ends in .txt or .tab
format A, v1.1:
is tabular
has a "id" column
may have a "name" column
may have a "size" column
with integer values in 1-10 range
is tab- or comma-separated
usually ends in .txt, .csv or .tab
的关键是进入文件可能被误格式化,或者是由于用户的错误或其他工具的出口执行不力,分类可能不确定。所以这需要支持多个部分匹配格式定义以及有用的解释。简单的投票方案可能足以对猜测进行排名(即发现的问题越多,匹配得分越低)。
例如,给定上述定义,与没有值的“ID”栏和“大小”列中的逗号分隔“的test.txt”文件将导致嗅探器日志是这样的:
Probably format A, v1.1
- but "size" column is empty
Possibly format A, v1.0
- but "size" column is empty
- but missing "name" column
- but is comma-delimited
Python标准库中的Sniffer功能正朝着正确的方向前进,但我正在寻找更一般和可扩展的(并不限于表格数据)。任何建议在哪里寻找这样的东西?