2012-03-22 46 views
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 

的关键是进入文件可能被误格式化,或者是由于用户的错误或其他工具的出口执行不力,分类可能不确定。所以这需要支持多个部分匹配格式定义以及有用的解释。简单的投票方案可能足以对猜测进行排名(即发现的问题越多,匹配得分越低)。

例如,给定上述定义,与没有值的“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功能正朝着正确的方向前进,但我正在寻找更一般和可扩展的(并不限于表格数据)。任何建议在哪里寻找这样的东西?

回答

0

首先,我很高兴我发现了这个问题 - 我也在想类似的东西(声明式解决方案来标记任何文件格式,并将其与文件本身一起提供给可验证文件的工具)。

你所命名的“嗅探器”被广泛地称为“文件卡弗”这个人是大的雕刻:http://en.wikipedia.org/wiki/Simson_Garfinkel

他不仅开发了一个杰出的雕刻师,他还提供了不同情况下的定义不完整的文件。

因此,如果您正在处理某种特定的文件格式修复工具 - 请检查上述分类以查明问题有多复杂。例如,从未完整接收的数据流雕刻并从磁盘映像雕刻显着延迟。使用碎片磁盘刻录磁盘映像会非常困难,而用一些无意义的数据填充某些视频文件,只是为了使其通过视频播放器打开很容易 - 您只需提供正确的格式即可。

希望它有帮助。

Regards