从二进制数据中识别没有扩展名的文件类型

时间:2012-08-30 04:55:20

标签: python file binaryfiles binary-data

我有一些没有扩展名的文件。我想将扩展名与他们联系起来。为此,我编写了一个python程序来读取文件中的数据。我怀疑的是,如果不使用第三方工具,如何在没有扩展名的情况下识别其类型。

我必须仅识别pdf,doc和文本文件。其他类型的文件是不可能的。

我的服务器是cent os

3 个答案:

答案 0 :(得分:10)

您可以读取文件的前几个字节并查找“幻数”。幻数上的Wikipedia page表示PDF文件以ASCII %PDF开头,doc文件以hex D0 CF 11 E0开头。

在一般情况下识别文本文件非常困难,因为许多标准幻数实际上是二进制文件开头的ASCII文本。对于您的情况,如果您可以保证您不会获得除PDF,DOC或TXT之外的任何内容,您可能可以获得的是检查PDF和DOC幻数,然后假设它是文本,如果它不是那些。

答案 1 :(得分:5)

你还没说过你的操作系统。如果它是基于* nix的,那么在libmagic周围有一个python包装器(使用ctypes),它使用与file命令相同的底层机制,它可以通过检查内容来识别没有扩展名的文件。或者只是检查libmagic如何使用文件定义,并弄清楚它如何识别两种主要文件类型(doc,pdf),剩下的一切必须是文本;-)并扩展现有代码。

答案 2 :(得分:0)

PDF文档以%PDF版本号开头,但其中一些可以完全压缩。