Środowiska graficzne takie jak GNOME, czy KDE posiadają własne biblioteki odpowiedzialne za określanie typu MIME pliku, czy też sugerowanie aplikacji za pomocą których można te pliki otworzyć, uruchomić. W przypadku GNOME można użyć
gnomevfs:
import gnomevfs
def get_meta_info(filename):
# filename - nazwa pliku ze ścieżką
try:
file_mimetype = gnomevfs.get_mime_type(filename)
except:
return False
ret = {}
# Typ Mime
ret['mime'] = file_mimetype
# domyślna aplikacja
ret['default_app'] = gnomevfs.mime_get_default_application(file_mimetype)
# inne aplikacje
ret['other_apps'] = gnomevfs.mime_get_all_applications(file_mimetype)
# opis typu mime
ret ['description'] = gnomevfs.mime_get_description(file_mimetype)
return ret
Teoretycznie obecnie powinna być już stosowana biblioteka GIO (w Pythonie API dostępne w pygobject):
import gio
print gio.content_type_guess('plik.ods')
a = gio.content_type_guess('plik.ods')
print gio.content_type_get_description(a)
By biblioteka zwróciła jakąś listę aplikacji - muszą one być zainstalowane (obsługuje aplikacje GNOME, GTK i chyba większość aplikacji KDE4). Podobną funkcjonalność można wyszukać w pykde4, lecz wersja 4.1.2 nie chciała się skompilować na moim komputerze (jak i dokumentacja na temat możliwości tego API jest dość surowa).
Bardziej przenośnym rozwiązaniem pobierania metainformacji o plikach jest zastosowanie bibliotek z projektu Hachoir. Dla wybranych binarnych typów plików potrafi pobrać metainformacje (grafika, multimedia, archiwa itp.):
from hachoir_core.error import HachoirError
from hachoir_core.cmd_line import unicodeFilename
from hachoir_parser import createParser
from hachoir_core.tools import makePrintable
from hachoir_metadata import extractMetadata
from hachoir_core.i18n import getTerminalCharset
def get_meta_info(filename):
# filename - nazwa pliku ze ścieżką
try:
parser = createParser(filename, filename)
except:
return False
if parser:
try:
metadata = extractMetadata(parser)
except HachoirError, err:
return False
else:
if metadata:
return metadata.exportPlaintext()
return False
Niestety hachoir obsługuje tylko wybrane formaty i zazwyczaj można używać go w roli "dopełniacza" (choć można pisać własne "parsery" dla nieobsługiwanych domyślnie plików).
- Dodane: 12.12.2008 przez riklaunim