Python Glossary English

все Python 3до 3.13Удалено из стандартной библиотекипонятие

imghdr

удалённые модули

Определял тип картинки по первым байтам файла. Удалён в Python 3.13 — проверяйте сигнатуру байт сами или берите Pillow, filetype.

Синтаксис

import imghdr  # до 3.13

imghdr.what(файл) или imghdr.what(None, h=байты) возвращал 'png', 'jpeg', 'gif' и ещё десяток имён — по магическим байтам в начале. Убран по PEP 594: список форматов устарел (нет WebP-вариантов, AVIF, HEIC), а обновлять его было некому. Как переписать: прочитайте первые байты файла и сравните их с сигнатурами через startswith — b'\x89PNG\r\n\x1a\n' у PNG, b'\xff\xd8\xff' у JPEG, b'GIF8' у GIF. Если картинку всё равно открывать, PIL.Image.open(f).format из Pillow скажет формат и заодно проверит файл. Библиотеки filetype и puremagic знают сотни сигнатур; пакет standard-imghdr возвращает старый модуль.

Примеры

# Python 3.13+
try:
    import imghdr
except ModuleNotFoundError as e:
    print(type(e).__name__)  # → ModuleNotFoundError
# Python 3.13+
SIGNATURES = {b'\x89PNG\r\n\x1a\n': 'png', b'\xff\xd8\xff': 'jpeg', b'GIF8': 'gif'}
def what(head):
    for magic, kind in SIGNATURES.items():
        if head.startswith(magic):
            return kind
    return None
print(what(b'\x89PNG\r\n\x1a\n' + bytes(24)))  # → png
print(what(b'hello'))  # → None
import imghdr
print(imghdr.what(None, h=b'\x89PNG\r\n\x1a\n' + bytes(24)))  # → png
print(imghdr.what(None, h=b'hello'))  # → None

См. также

Частые ошибки

Открыть в полном глоссарииdocs.python.orgСообщить о неточности