识别文件的类型,而不脱离二进制数据扩展(Identifying the type of a file

2019-09-21 22:39发布

我有一些文件,而不扩展。 我想联想扩展到他们。 对于我写了一个Python程序文件中读取数据。 我的疑问是我怎么能确定其类型没有扩展名,而无需使用第三方工具。

我只能确定一个PDF,DOC和文本文件。 文件的其他类型是不可能的。

我的服务器是百分之OS

Answer 1:

你可以读取文件的前几个字节,并寻找一个“幻数”。 在维基百科页面上的神奇数字表明,PDF文件开始ASCII %PDF和DOC文件开始六角D0 CF 11 E0。

识别文本文件将会在一般情况下非常艰难,因为很多标准的幻数实际上是二进制的文件的开头ASCII文本。 对于你的情况,如果你能保证你不会得到任何东西,但PDF,DOC或TXT,你很可能逃脱被检查的PDF和DOC幻数,然后假设它是文本,如果它不是任那些。



Answer 2:

你有没有说什么操作系统上的。 如果其在* nix基于一个那么有一个Python包装(即使用ctypes的)围绕libmagic它使用相同的底层机制的file命令,它可以通过检查内容识别文件,而不扩展。 或者只是检查libmagic如何使用文件定义,只是制定出如何识别左侧必须是文本;-)和扩展现有代码的两种主要类型的文件(DOC,PDF)和一切。



Answer 3:

PDF文档与PDF%版本号开始,但他们中的一些可能被完全压缩。



文章来源: Identifying the type of a file without extension from binary data