2012-04-21 15 views
5

Moduł Mimetype Pythona nie jest szczególnie dokładny i opiera swoje wyniki na rozszerzeniu pliku. Jedynym sposobem mogę myśleć, aby uzyskać bardziej dokładny wynik jest wywołanie file polecenia Unix z subprocess.Popen jak tak:Lepsza, dokładniejsza detekcja typu MIME w Pythonie

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

to czuje nieeleganckie. Czy istnieje lepszy sposób na zrobienie tego bez konieczności wywoływania file, ale nadal osiągając ten sam poziom dokładności?

Odpowiedz

7

Można wypróbować: magic's mimetype

+0

Używa tego samego kodu identyfikacyjnego MIME co "plik". –

+2

Prawda - ale jest bardziej elegancka, o co prosił. :) – Mads

2

używam coś podobnego ale nieco skróconej:

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

Nie może być bardziej elegancki, ale jest krótsze i nieco łatwiejsze do odczytania, a ja zawsze wolę że.