2012-04-21 8 views
5

Il modulo mimetipi di Python non è particolarmente accurato e basa i risultati sull'estensione del file. L'unico modo che posso pensare di ottenere un risultato più preciso è quello di chiamare il file comando Unix con subprocess.Popen come così:Rilevamento di tipo mime migliore e più accurato in Python

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

Questo si sente poco elegante. C'è un modo migliore per fare questo senza dovendo chiamare file ma ottenendo comunque lo stesso livello di accuratezza?

risposta

7

Si potrebbe provare: magic's mimetype

+0

Questo utilizza lo stesso codice di identificazione MIME come 'file'. –

+2

Vero - ma è più elegante, che è quello che ha chiesto. :) – Mads

2

io uso qualcosa di simile, ma leggermente abbreviato:

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

potrebbe non essere più elegante, ma è più breve e un po 'più facile da leggere, e ho sempre preferisco quella.