Getting MIME Types on Files & Buffers in Python
Through programming languages I’ve been through, finding MIME types is not that kinda easy, the language might not have a built-in function for that or if they have it won’t be that efficient, I can recall in PHP I’d activated the finfo module to find MIME type of existing files.
Now in Python, we have a built-in module with is the mimetypes but isn’t that efficient because last time I used it to find a MIME type of a .html file; I couldn’t get an accurate result, below is a simple function I use to get MIME type of a file in python
#!/usr/bin/python3 import mimetypes, os def getMIME( File ): mimes = mimetypes.read_mime_types( File ) filename, ext = os.path.splitext( File ) if bool( mimes ) is False: return False else: for i in mimes.items(): if i[ 0 ] == ext: return i[ 1 ] break print( getMIME( '/var/www/html/index.html' ) )
But that couldn’t give me an efficient result, no result for the .html file. I went into search (Google & StackOverflow…LOL) and found the magic module, this module is not installed by default in Python so firstly we’ll get this module. If you are using PIP then just
pip install magic
or normal through the OS repository
$ sudo apt-get install python-magic
Rewriting the function above with the magic module:
#!/usr/bin/python3 import magic def getMIME( File ): f = magic.open( magic.MAGIC_MIME ) f.load() return f.file( File ) print( getMIME( '/var/www/html/index.html' ) )
You should see that the above magic module looks accurate and efficient, this module also accepts the buffer method using
f.buffer('My simple string')
and this also returns the accurate MIME. Actually am feeling sleepy typing this but what I typed is working. Cheers 🙂