使用filetype 传入文件或者路径,源码里是这样写的

def guess(obj):
    """
    Infers the type of the given input.

    Function is overloaded to accept multiple types in input
    and peform the needed type inference based on it.

    Args:
        obj: path to file, bytes or bytearray.

    Returns:
        The matched type instance. Otherwise None.

    Raises:
        TypeError: if obj is not a supported type.
    """
    return match(obj) if obj else None

实际操作中需要转成二进制 以 rb 或者rb+ 的模式打开,否侧会出现
UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0xff in position 0: illegal multibyte sequence

import filetype

def main():
    with open('timg.jpg',"rb") as f:
        kind = filetype.guess(f)
        if kind is None:
            print('Cannot guess file type!')
            return

    print('File extension: %s' % kind.extension)
    print('File MIME type: %s' % kind.mime)

if __name__ == '__main__':
    main()

最后附上文件使用模式的列表:

模式

描述

r

打开的文件为只读模式。文件指针位于文件的开头,这是默认模式。

rb

打开仅用二进制格式读取的文件。文件指针位于文件的开头,这是默认模式。

r+

打开读写文件。文件指针放在文件的开头。

rb+

以二进制格式打开一个用于读写文件。文件指针放在文件的开头。

w

打开仅供写入的文件。 如果文件存在,则覆盖该文件。 如果文件不存在,则创建一个新文件进行写入。

wb

打开仅用二进制格式写入的文件。如果文件存在,则覆盖该文件。 如果文件不存在,则创建一个新文件进行写入。

w+

打开写入和取读的文件。如果文件存在,则覆盖现有文件。 如果文件不存在,创建一个新文件进行阅读和写入。

wb+

打开一个二进制格式的写入和读取文件。 如果文件存在,则覆盖现有文件。 如果文件不存在,创建一个新文件进行阅读和写入。

a

打开一个文件进行追加。 如果文件存在,则文件指针位于文件末尾。也就是说,文件处于追加模式。如果文件不存在,它将创建一个新文件进行写入。

ab

打开一个二进制格式的文件。如果文件存在,则文件指针位于文件末尾。 也就是说,文件处于追加模式。如果文件不存在,它将创建一个新文件进行写入。

a+

打开一个文件,用于追加和阅读。 如果文件存在,则文件指针位于文件末尾。 文件以附加模式打开。 如果文件不存在,它将创建一个新文件进行阅读和写入。

ab+

打开一个二进制格式的附加和读取文件。 如果文件存在,则文件指针位于文件末尾。文件以附加模式打开。如果文件不存在,它将创建一个新文件进行读取和写入。