前言
如何判断一个文件的类型呢,判断这个文件是png还是jpg,还是MP3文件?filetype包是python用来判断文件类型的依赖包,github地址:https://github.com/h2non/filetype.py
filetype安装
pip install filetype
简介
一个小巧自由开放Python开发包,主要用来获得文件类型。包要求python 3.+
功能特色
- 简单友好的API
- 支持宽范围文件类型
- 提供文件扩展名和MIME类型判断
- 文件的MIME类型扩展新增
- 通过文件(图像、视频、音频...)简单分析
- 可插拔:添加新的自定义类型的匹配
- 快,即使处理大文件
- 只需要前261个字节表示的最大文件头,这样你就可以通过一个单字节
- 依赖自由(只是Python代码,没有C的扩展,没有libmagic绑定)
- 跨平台文件识别
使用示例
import filetype def main(): kind = filetype.guess('D:\生活\儿歌\儿歌-拔萝卜.mp3') 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()
运行结果
结合文件上传使用示例
requests_toolbelt使用参考https://www.cnblogs.com/canglongdao/p/13440314.html
# coding:utf-8 from requests_toolbelt import MultipartEncoder import requests m = MultipartEncoder( fields = [ ('source', ('ch', open("d:\ch.jpg","rb"), 'image/jpep')), ('source', ('hc', open("d:\hc.jpg","rb"), 'image/jpeg')), ] ) r = requests.post('http://httpbin.org/post', data=m, headers={'Content-Type': m.content_type})
imgFile后面的参数
("1.png",open("d:\1.png","rb"),"image/png")
每次都需要根据不同的文件类型取修改成对应的mime类型
接下来可以用上面的自动获取文件类型的方法,写个函数,只需要传文件的路径即可自动获取
import filetype import os from requests_toolbelt import MultipartEncoder import requests def up(filepath="d:\ch.jpg"): #根据文件路径,自动获取文件名称和文件mime类型 a=filetype.guess(filepath) if a is None: print('Cannot guess file_type!') #媒体类型 typee=a.mime #文件真实路径 realp=os.path.realpath(filepath) #获取文件名 fname=os.path.split(filepath)[-1] return (fname,open(realp,"rb"),typee) m=MultipartEncoder( fields=[ ('source',up()), ]) r=requests.post('http://httpbin.org/post',data=m,headers={'Content-Type':m.content_type}) print(r.text)
运行结果
这样就可以只关注文件的路径,不需要关注具体类型了。