为什么python imghdr测试函数将文件作为参数?

时间:2015-09-28 15:11:58

标签: python python-2.7 imghdr

我正在查看imghdr模块的源代码,它是python标准库的一部分(我使用的是2.7)。结构非常简单 - 一个what函数,它迭代一个名为test_filetype的函数列表,如果传入的文件与任何测试匹配,则返回该文件类型的字符串。 / p>

所有test_filetype个函数都有两个参数,hfh是一个内容为f.read(32)的字符串,f是打开的文件对象。 test_filetype函数实际上没有任何函数使用f

为什么test_filetype个函数集都采用从未使用过的参数?

1 个答案:

答案 0 :(得分:1)

我的猜测是允许将自定义函数添加到imghdr.tests。来自documentation of imghdr module -

  

您可以通过附加到此变量来扩展imghdr可识别的文件类型列表:

     

imghdr.test

     

执行各项测试的功能列表。每个函数都有两个参数:字节流和类似开放文件的对象。当使用字节流调用what()时,类文件对象将为None。

     

如果测试成功,测试函数应返回描述图像类型的字符串,如果失败则返回None。

从文档中可以看出,imghdr模块允许扩展到tests列表。我认为添加参数f可以用于添加到此列表中的这些自定义函数。

看看imghdr.what() function -

if h is None:
    if isinstance(file, basestring):
        f = open(file, 'rb')
        h = f.read(32)
    else:
        location = file.tell()
        h = file.read(32)
        file.seek(location)

可以看出,当我们向what()函数发送文件名时,它只读取文件中的前32个字节,并仅在h参数中发送这32个字节。 1}}函数,我相信额外的test参数可能适用于第一个f字节不足以确定图像格式的情况(特别是对于自定义测试)。