每种文件都有自己独特的文件头结构和数据组织形式,这些都会在specification中进行详细说明和描述。
GIF文件的头结构比较简单,前4个字节是GIF8,例如:
但是其他图片文件的结构就复杂很多了,自己写代码检测的难度要大很多。Python提供了一个标准库imghdr,其中的what()函数可以帮助我们完成这件事情,不管文件扩展名是什么,都能根据文件头数据判断是否为下面格式的图片之一,如果都不是就返回None,原理与上面的代码类似。
同样的道理,Python标准库sndhdr也提供了用来检测声音文件类型的what()函数,该函数返回一个元组,其中第一个元素表示数据格式,能够识别的类型有'aifc'、'aiff'、'au'、'hcom'、'sndr'、'sndt'、'voc'、'wav'、'8svx'、'sb'、ub'或者'ul'。