1

是否有任何框架支持使用声明性、模糊模式和/或有效格式的语法定义来嗅探文件格式?我正在寻找可以处理脏文件或格式错误的文件的东西,可能跨越多个版本的文件格式定义/模式,并使编写基于规则或模式的嗅探器变得容易,这些嗅探器可以基于内省对文件类型做出最佳猜测.

我正在寻找一些声明性的东西,允许您描述性地定义格式,也许是 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 标准库中的嗅探器功能正朝着正确的方向发展,但我正在寻找更通用和可扩展的东西(并且不限于表格数据)。关于在哪里寻找这样的东西有什么建议吗?

4

1 回答 1

0

首先,我很高兴我找到了这个问题 - 我也在考虑类似的事情(标记任何文件格式并将其与文件本身一起提供给可以验证文件的工具的声明性解决方案)。

你所命名的“嗅探器”被广泛称为“文件雕刻师”,这个人擅长雕刻:http ://en.wikipedia.org/wiki/Simson_Garfinkel

他不仅培养了出色的雕刻师,还提供了不同情况下不完整文件的定义。

因此,如果您正在使用某些特定的文件格式修复工具 - 检查上述分类以了解问题的复杂程度。例如,从不完整接收的数据流中雕刻和从磁盘映像中雕刻显着延迟。从带有碎片磁盘的磁盘图像中雕刻会更加困难,而用无意义的数据填充一些视频文件,只是为了让视频播放器打开它很容易 - 你只需要提供正确的格式。

希望它有所帮助。

问候

于 2012-04-18T21:05:51.283 回答