【发布时间】:2012-04-06 16:13:53
【问题描述】:
是否有任何框架支持对有效格式使用声明性、模糊模式和/或语法定义的文件格式嗅探?我正在寻找可以处理脏文件或格式错误的文件的东西,可能跨越多个版本的文件格式定义/模式,并使编写基于规则或模式的嗅探器变得容易,这些嗅探器可以基于内省对文件类型做出最佳猜测.
我正在寻找一些声明性的东西,允许您以描述性方式定义格式,也许是 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 标准库中的 Sniffer 功能正朝着正确的方向发展,但我正在寻找更通用和可扩展的东西(并且不限于表格数据)。关于在哪里寻找这样的东西有什么建议吗?
【问题讨论】:
标签: parsing pattern-matching file-format sniffing