2012-04-21 32 views
5

Mô-đun mimetypes của Python không phải là đặc biệt chính xác và dựa trên kết quả của nó trên phần mở rộng của tệp. Cách duy nhất tôi có thể nghĩ ra để có được một kết quả chính xác hơn là để gọi Unix file lệnh với subprocess.Popen như vậy:Phát hiện loại mime chính xác hơn, tốt hơn trong Python

import subprocess 
mimetype = subprocess.Popen(['file', '/path/to/file', '--mime-type', '-b'], 
    stdout=subprocess.PIPE).stdout.read().strip() 

này cảm thấy không thanh nha. Có cách nào tốt hơn để thực hiện điều này mà không cần phải gọi file nhưng vẫn đạt được cùng một mức độ chính xác không?

Trả lời

7

Bạn có thể thử: magic's mimetype

+0

Điều này sử dụng mã nhận dạng MIME giống như 'tệp'. –

+2

Đúng - nhưng nó thanh lịch hơn, đó là những gì anh ta yêu cầu. :) – Mads

2

tôi sử dụng một cái gì đó tương tự nhưng hơi viết tắt:

import subprocess 
mimeType = subprocess.check_output(['file', '-ib', '/path/to/file']).strip() 

Nó có thể không được thanh lịch hơn, nhưng nó ngắn và một chút dễ dàng hơn để đọc, và tôi luôn thích cái đó.

Các vấn đề liên quan