How to find the mime type of a file in Python?

In some scenarios, it is important to determine the MIME type of a file to verify its content type, especially when working with file uploads or handling media files. Python provides modules such as mimetypes and magic to determine the MIME type of a file. In this article, we'll explore different methods to find a file's MIME type using Python.

Using mimetypes.guess_type()

The mimetypes module in Python provides the guess_type() function, which guesses the MIME type and encoding of a file based on its filename or URL. This method relies on file extensions and is part of Python's standard library.

Syntax

mimetypes.guess_type(url, strict=True)

Parameters:

  • url − The filename or URL to analyze
  • strict − If True (default), only official MIME types are returned

Example

Here's how to use mimetypes.guess_type() to get the MIME type of different file types ?

import mimetypes

# Different file types
files = ["example.pdf", "image.jpg", "data.csv", "script.js"]

for filename in files:
    mime_type, encoding = mimetypes.guess_type(filename)
    print(f"{filename}: {mime_type}")
example.pdf: application/pdf
image.jpg: image/jpeg
data.csv: text/csv
script.js: application/javascript

Using Python-Magic Library

The python-magic library uses libmagic to determine the MIME type by examining the file content itself, which makes it more accurate than just guessing from the file extension. This method reads the file's binary signature.

Installation

First, install the python-magic library ?

pip install python-magic

Note: On Linux or macOS, you may need to install additional system packages like libmagic.

Example

Below is an example using python-magic to find the MIME type based on file content ?

import magic

# Create a sample file for demonstration
with open("sample.txt", "w") as f:
    f.write("Hello, World!")

# Detect MIME type from file content
mime = magic.Magic(mime=True)
mime_type = mime.from_file("sample.txt")

print(f"MIME type: {mime_type}")

# Also detect from file content directly
content = b"Hello, World!"
mime_type_from_buffer = mime.from_buffer(content)
print(f"MIME type from buffer: {mime_type_from_buffer}")
MIME type: text/plain
MIME type from buffer: text/plain

Comparison of Methods

Method Accuracy Dependencies Best For
mimetypes Extension-based Built-in Quick checks, known extensions
python-magic Content-based External library Security checks, unknown files

Handling Edge Cases

Sometimes files may have incorrect extensions or no extensions at all. Here's how to handle such cases ?

import mimetypes

# File without extension
filename_no_ext = "myfile"
mime_type, encoding = mimetypes.guess_type(filename_no_ext)

if mime_type is None:
    print(f"Cannot determine MIME type for: {filename_no_ext}")
else:
    print(f"MIME type: {mime_type}")

# File with unknown extension
unknown_file = "data.xyz"
mime_type, encoding = mimetypes.guess_type(unknown_file)
print(f"Unknown extension result: {mime_type}")
Cannot determine MIME type for: myfile
Unknown extension result: None

Conclusion

Use mimetypes.guess_type() for quick MIME type detection based on file extensions. For security-critical applications or files with suspicious extensions, use python-magic to analyze actual file content. The choice depends on your accuracy requirements and whether you can install external dependencies.

Updated on: 2026-03-24T18:34:00+05:30

8K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements