是否有任何框架支持使用声明性、模糊模式和/或有效格式的语法定义来嗅探文件格式?我正在寻找可以处理脏文件或格式错误的文件的东西,可能跨越多个版本的文件格式定义/模式,并使编写基于规则或模式的嗅探器变得容易,这些嗅探器可以基于内省对文件类型做出最佳猜测.
我正在寻找一些声明性的东西,允许您描述性地定义格式,也许是 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
关键是由于用户错误或从其他工具导出的执行不当,传入的文件可能格式错误,并且分类可能是不确定的。所以这需要支持对格式定义的多个部分匹配,以及有用的解释。一个简单的投票方案可能足以对猜测进行排名(即发现的问题越多,匹配分数越低)。
例如,给定上述定义,以逗号分隔的“test.txt”文件,其中“id”列和“size”列没有值,将导致嗅探器日志类似于:
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 标准库中的嗅探器功能正朝着正确的方向发展,但我正在寻找更通用和可扩展的东西(并且不限于表格数据)。关于在哪里寻找这样的东西有什么建议吗?