Я знаю, что могу использовать testzip или просто попытаться распаковать файл и поймать исключение.
Моя проблема в том, что у меня могут быть .msg файлы с вложениями в виде zip-файлов.
В этом случае ZipFile просто пропустит первые несколько байтов, откроет прикрепленный zip-файл и не вызовет исключение.
Единственный способ, которым я могу это придумать, - это вручную открыть файл и проверить первые два байта, чтобы увидеть, является ли он PK, но я просто хотел бы иметь более «строгую» проверку.
Возможно ли это с помощью ZipFile или другой библиотеки?






Что для вас «на самом деле zip-файл»?
Файл, отмеченный как таковой с помощью PK?
Действительный «заголовок» в конце файла?
В дикой природе есть файлы, которые одновременно работают как исполняемый файл PE, ZIP и PDF. Самое строгое, что вы можете получить, это, вероятно, и ПК, и чтение заголовка. Вы уже ответили на свой вопрос.
В итоге я проверил первые четыре байта (80, 75, 3, 4), потому что, по-видимому, нет возможности сделать какую-то строгую проверку. Даже инструмент командной строки unzip просто отбросит первые несколько байтов, напечатает предупреждение и все равно извлечет.
Просто идея: может быть, запустить команду
fileчерезsubprocessи проверить вывод?