Программа определение типа файла по содержимому

Послал Вам кто-нибудь e-mail с файлом, с которым не знаете что делать? Вы скачали файл и не имеете понятия для чего он предназначен? В чём можно открыть файл с данным расширением? Ответы на эти вопросы найдёте в этой статье.

Со времён MS-DOS для различия отдельных файлов применяются так называемые расширения. Ранее применялись расширения длиной в три знака за точкой, сегодня же это ограничение уже не действует. Некоторым операционным системам, как например Linux, расширения вообще не нужны. Для идентификации файлов в этих системах применяется команда file, где параметром служит имя файла — впоследствии узнаете кое что о его содержании.

И всё же расширения в этих системах могут появляться, это может быть в случае приложения к e-mail´у или файла из Интернета. Задача расширения — различать файлы по их содержанию. На первый взгляд так можно определить, что будет файл содержать. Для примера можно определить, что файл.txt будет содержать текст, .jpg — картинку а.avi конечно же видео. А что например.bz2, .7z, .lha и т.д..

Как найти файл по содержимому/ How to find a file by content

Не знаете? Читайте дальше и узнаете как это определить.

Как определить, какой это файл?

Первая проблема, с которой Вы можете столкнуться, это то, что расширение данного файла не известно Вашей системе и система спросит, в какой программе должен быть файл открыт. Если расширение неизвестно самому пользователю, нужно начать поиск в Интернете. Некоторые используют любимый поисковик как например Google, или используют прямо некоторые из специализированных сайтах. Благодаря им узнают, о каком файле идёт речь и в какую программу нужно искать. Некоторые сайты занимающиеся расширениями:

File extensions (http://www.file-extensions.org/)

Этот сайт предлагает простой поиск по расширению файла, начальной буквы, или можете просматривать расширения по их назначению. Если найдёте своё расширение, то узнаете и подробную информацию о данном формате, а так же в каких программах может быть данный файл открыт.

FileInfo.net (http://www.fileinfo.net/)

Этот сайт предлагает такие же функции как и предыдущий стой разницей, что не показывает и другие возможные расширения для данного формата. В отличие от предыдущего решения здесь найдёте и соответствующие программы для операционной системы Windows, Mac OS a Linux.

Расширения файлов (http://www.pndesign.cz/pripony-souboru.php)

Чешское подобие предыдущих сайтов. К сожалению много информации здесь не найдёте. Всё же основная информация о данном расширении здесь есть.

И всё таки если не получается?

Расширение можно элементарно поменять и поиски по расширению не обязательно приведут к правильной цели. С изменением расширения я столкнулся у одного пользователя, который не мог воспроизвести фильм, потому что его расширение было для установленного проигрывателя неизвестно (.mp4). Тогда изменили расширение на.avi и его любимый проигрыватель фильм воспроизвёл. Это решение всё же не совсем подходящее, поэтому его не рекомендую. В случае если кто то так уже сделал, решением могут быть разные online услуги для идентификации файлов. Между такими online услуги есть например такие:

Как автоматически удалить дубликаты файлов по содержимому

iConv (http://www.iconv.com/file.htm)

Предлагает интересную online услугу, где достаточно закачать файл. В последствие Вам страничка «скажет», что этот файл содержит. К сожалению информация из этой услуги слишком скромная. Так что её использование только ориентировочное. Использовать можно только в случае, если существенно изменён формат, т.е. файл с расширением.txt на самом деле видео.

Online TrID File Identifier (http://mark0.net/onlinetrid.aspx)

Здесь можете опять закачать свой файл, о котором ничего не известно. Эта услуга Вам предоставит важную информацию о файле. В отличии от предыдущей программы, эта предоставляет больше информации.

А что если нет интернета? TrID

Проект Online TrID File Identifier имеет и offline версию в виде программы, которая управляется из командной строки. Это может быть для одного плюсом, для другого наоборот минусом. И эта программ сможет определить, что на самом деле файл собой представляет, использует не только расширение. Определение содержимого происходит при помощи исследования и сравнения структуры массива данных, поэтому идентификация у небольших файлов может длиться дольше чем у следующей программы.

Опять простая программа, которая управляется через командную строку. В результате работы программы получите информацию о данном файле в виде типа и meta данных. В этом случае можете узнать например имя автора данного документа. Идентификация больших файлов, по времени, всё таки более сложная, чем в предыдущем случае.

Наверняка каждому попадался файл без расширения? Возникают вопросы как его открыть? Один из способов это так просто догадаться, и попытаться изменить расширение файла на различные типы файлов и попробуйте открыть файл. Это иногда работает, а может не повезти, и не удастся угадать. И метод научного тыка может занять изрядно времени, если вы конечно упорный, и вам по зарез нужно открыть этот файл

В этой статье я покажу вам быстрый и более точный способ определения типа файла, который вы можете использовать. Для того, чтобы сделать это, я создал несколько тестовых файлов, PDF, JPEG, MP3, EXE и DLL, просто стер у них расширение. Очевидно, что ваш файл может быть различного типа, но процедура будет такой же, для любого типа файлов. Тестовые файлы выбрал совершенно случайно
Для этой процедуры вам необходимо узнать HEX – код файла. Ну что вы уже напугались и думаете, как все это заумно. Нет, для этого нам нужен текстовый редактор , такой как стандартный Блокнот , или можно скачать (я даже советую это сделать, он намного функциональней, и работает шустрее) Notepad++ .

Открываем файлы без расширения

А теперь просто открываем файлы без расширения в тестовом редакторе, у применяю Notepad++, но методика для всех одинакова.

Первый на очереди PDF тест и видим в первых же строчках информация, о расширении в явном виде.

И видим в JPEG в начале строки, какое не понятное JFIF , в DLL и EXE – MZ , а MP3 – ID3 . Далее интернет нам в помощь, вбиваем в поисковик фразу, например ID3 формат, или JFIF расширение. И увидим что ID3 – это от англ. Identify an MP3 , некий формат метаданных, но это неважно, это же наверняка mp3 файл. На запрос JFIF получили JPEG File Interchange Format , некая спецификация, MZ – формат исполнительных файлов EXE и DLL . То есть в первых строчках находиться вся нужная нам информации, и мы без труда можем открыть любой файл без расширения

Читайте также:
На какой программе отварить макароны в мультиварке

В целом, я считаю, это будет гораздо быстрее так выяснить, чем случайно пробуя различные расширения файлов без какой-либо идеи. Если вы все еще не можете понять, какой файл у вас есть, оставляйте комментарии, и я постараюсь помочь. Наслаждайтесь!

Представим ситуацию, что вам отправили важный документ, после чего отправитель вышел из сети. Скачав файл, вы обнаруживаете, что у него отсутствует расширение. Конечно, лучше в таком случае уточнить информацию у отправителя файла, но не всегда есть возможность с ним связаться. Тогда вам нужно самостоятельно определить расширение, чтобы открыть этот файл. В данной статье будут рассмотрены способы выполнения данной задачи.

Как узнать расширение файла?

Если расширение файла было утеряно, мы должны открыть этот самый файл с помощью блокнота, чтобы посмотреть содержимое, но лучше использовать бесплатную программу Notepad++, потому что при открытии больших файлов блокнот перестает отвечать и очень долго загружает текст.

Возьмем 7 файлов:

  • img_jpg;
  • img_gif;
  • music;
  • document;
  • архив.zip;
  • rar архив;
  • программа.exe.

Изображения

Открываем первый, к примеру img, и видим набор непонятных букв и символов. Обратим свое внимание на первую строку с надписью ‰PNG. Это значит, что png.

У второго изображения мы увидим следующие:

Это значит, что данный файл в формате jpg (jpeg).

Если у вас имеется файл GIF, в этом случае в программе будет отображаться надпись GIF89a.

Музыка

Как узнать, какое расширение у файла аудиозаписи? Сделать это не так уж сложно.

Зайдя в Notepad, мы увидим следующие символы (изображение ниже), что говорят нам о том, что данный файл принадлежит к формату MP3.

Если вы увидели надпись OggS, то знайте, вы столкнулись с

Документы

Стоит отметить, что у всех программ (таблицы, приказ, материалы и тд), будет единая надпись «РП», если у вас Microsoft OFFICE 2003 и ниже или «РК», если у вас Microsoft OFFICE версии 2007 и выше. Дальше видим надпись .xml, что говорит нам о том, что это продукт компании MS. После этого просто перебираем все программы, начиная от Doc заканчивая Pptx. Это заметно увеличивает время поиска нужного формата, но тогда вы точно сможете найти нужный вам тип.

Если вам лень перебирать все типы, то можно воспользоваться онлайн-ресурсом Online TrID File Identifier, о котором пойдет речь ниже.

Архив

В архиве, так же как и в MS, будет «РК», однако, без всяких дополнительных надписей, уточняющих эту информацию. Это будет говорить о том, что перед вами архив ZIP. Когда вы откроете файл rar, то увидите, что он начинается с записи Rar.

Видеозапись

Чтобы узнать расширение файла видеозаписи, мы должны открыть его в Notepad++, где увидим следующие записи, говорящие о том, что перед нами видео формата MP4.

Если же вы столкнулись с AVI, то появится соответствующая запись.

Программа

Как узнать файл без расширения?

При открытии содержимого файла программы в самом начале мы можем наблюдать короткую запись MZ, которая говорит нам, что перед нами, несомненно, файл exe.

Online TrID File Identifier

Если вы не хотите скачивать Notepad++, или вам просто лень нажимать правую кнопку мыши, а затем левую, то к вашему вниманию сервис, который поможет вам узнать расширение файла. Сделать это совершенно не сложно, для этого выполните следующие простейшие действия.

Нужно выбрать файл и нажать кнопку «Старт». Ресурс с точностью до процентов покажет тип файла, который был загружен, название программы, ссылку на информацию о продукте.

Готово, теперь вы можете спокойно ставить потерянное расширение.

Как поставить расширение?

Для того чтобы поставить тип файла, вам нужно нажать правой кнопкой по файлу и переименовать его, добавив в конец названия точку и тип файла. Внимание! Пробелы в расширении ставить нельзя.

Существуют ли еще способы нахождения формата файла?

Да, существует большое количество ресурсов, программ и мануалов. Они подскажут, как можно узнать расширение файла.

Переименовал файл, но ничего не изменилось. Что делать?

В этом случае проверьте правильность написания расширения. Например, чтобы переименовать в MS Word, нужно написать не doc, а docx.

Также вы можете нажать два раза на файл левой кнопкой мыши и открыть его с помощью нужной программы из списка установленных, выбрать в магазине MS или найти программу на компьютере, если ее нет в списке.

Возможно, у вас не установлена программа, которая поддерживает данное расширение. Скачайте и установите данную программу.

Могут ли быть ошибки в онлайн-ресурсах? Где можно узнать расширение файла?

Да, определенно могут. Ни один сервис не застрахован от появления ошибок алгоритма. Но если вы боитесь, что ресурс ошибется, то просто сделайте все вручную.

Заключение

Поздравляем! Вы познакомились со способами, которые помогут вам узнать, какое расширение у файла. Теперь вы сможете его установить на свой компьютер. Данная информация может быть очень полезной для любого пользователя компьютера, ведь столкнуться с такой проблемой может каждый.

К ак известно любая информация будь то текст, изображение или видео, по сути, является ничем иным как набором двоичного кода — последовательности нулей и единиц. Именно в таком виде на жёстком диске хранятся данные. Понятие двоичный код едва ли не абстрактное, это не запись в привычном понимании этого слова, двоичный или машинный код это скорее состояние микроскопических ячеек на магнитной поверхности жесткого диска. Положительный заряд такой ячейки имеет знак плюс или 1, отрицательный — минус или 0.

Логически объединенные последовательности нулей и единиц как раз и составляют то, что мы называем файлами. Но ведь мы знаем и то, что типов файлов очень много. Есть текстовые файлы, мультимедийные, архивные, системные, исполняемые и так далее. Каким же образом операционная система определяет как читать или обрабатывать тот или иной файл? Прикладные программы распознают тип файла по его расширению — набору символов следующих после имени файла и отделенных от него точкой.

Но что будет, если расширение удалить? Всё правильно, операционная система не сможет открыть такой файл, так как не будет знать какую программу для этого использовать. Однако ни логическая структура, ни содержимое переименованного файла от этого не изменится. Вы и сами в этом можете убедиться удалив расширение какого-нибудь файла, а затем попробовав его открыть соответствующей программой. Уверены, с этим у вас проблем не возникнет.

Следовательно, вовсе не расширение определяет тип файла. Тогда что же? Тип файла определяет его формат или иначе спецификация структуры данных. Расширение и формат очень часто путают, хотя на деле это совершенно разные понятия. Тут возникает вполне закономерный вопрос, а как определить формат файла, если его расширение по какой-то причине оказалось утрачено?

Читайте также:
Как построить филогенетическое дерево в программе mega

Оказывается очень просто.

Грубо говоря, все файлы состоят из двух частей. Первая часть это заголовок, содержащий различную метаинформацию включая те данные, которые позволяют прикладным программам этот самый файл идентифицировать. Вторая часть это «тело» файла. Отвечающая за определение типа файла часть заголовка файла именуется дескриптором или описанием. Наиболее распространёнными типами дескрипторов являются HEX и ASCII. Первый тип заголовков можно просмотреть только с помощью специальных утилит — шестнадцатеричных редакторов .

Для просмотра дескрипторов второго типа можно обойтись обычным текстовым редактором, тем же Блокнотом или . Однако следует учитывать, что далеко не все последовательности байтов можно перевести в ASCII-код, поэтому для определения формата всё-таки лучше использовать HEX-редакторы. Открытый в HEX-редакторе файл отображается в виде матрицы из последовательности байтов. Каждая ячейка соответствует одному байту. Данные дескриптора содержатся как раз в первых трёх ячейках (реже двух или четырех), расположенных по горизонтали. Представляют они из себя шесть символов в шестнадцатеричном счислении, например 49 44 33 или ff d8 e0 .

Естественно они нуждаются в расшифровке. А расшифровать их можно на специальных сайтах с описаниями форматов. Одним из лучших сайтов, где можно определить формат по HEX-дескриптору является open-file.ru . Есть и другие подобные ресурсы, но они не настолько удобны. На open-file.ru же имеется специальная поисковая форма, куда можно вставить HEX или ASCII дескриптор и пробить его по базе данных. Система быстро найдёт соответствующий формат и предоставит вам его полное описание.

С HEX-редакторами всё более или менее понятно, но как мы сказали для определения ASCII-заголовков также можно использовать редакторы текстовые. Принцип здесь тот же самый, открываем файл Блокнотом или Notepad++, копируем первые символы и вставляем их в поисковое поле того же open-file или другого сайта с поддержкой поиска по заголовкам.

Казалось бы всё очень просто, но есть в деле идентификации форматов и свои сложности. Иногда ASCII-заголовки совпадают с расширением файла (RAR и PDF), но может быть и такое, что заголовок оказывается принадлежащим сразу нескольким форматам. Это можно видеть на примере офисного формата DOCX (PK и 50 4b 03 04). В таких случаях точно определить формат проблематично.

1. Нажмите кнопку «FILE» или «URL», чтобы переключаться между локальными файлами или онлайн-файлами. Нажмите кнопку «Выбор файлов», чтобы выбрать локальный файл или ввести URL-адрес онлайн-файла.

2. Нажмите «Проанализируйте сейчас!». чтобы начать анализ. Результаты анализа будут перечислены в разделе «Результаты анализа».

относительно:

Не знаете, в каком формате находится ваш файл? Просто загрузите его и дайте нашему серверу проанализировать двоичные подписи файла, чтобы определить, что именно форматирует ваш файл.

Результаты анализа покажут все возможные форматы файлов. Например: если вы отправляете файл DOCX, результаты анализа будут идентифицировать файл как формата DOCX, так и формата ZIP. Это связано с тем, что документы DOCX хранятся в пакетах Open Packaging Convention (OPC), которые представляют собой файлы ZIP, содержащие XML и другие файлы данных. Файл DOCX можно переименовать в ZIP-файл и открыть с помощью программного обеспечения WinZIP.

Источник: fortagame.ru

Как определить MIME-тип файла по содержимому?

Допустим у нас есть Blob или File без явно прописанного типа, т. е. свойство type пустое.
Существует ли какой-нибудь простой способ определить MIME-тип файла?
Желательно без возни со сравнением магических чисел вручную!

Тестовый стенд для экспериментов: https://nadim.work/zip/

Что я уже пробовал делать

У меня была такая идея, попробовать записать файл в виртуальную файловую систему и прочитать его обратно, по моим предположениям операционная система должна автоматически присвоить правильный MIME-тип, но к сожалению это не сработало и MIME-тип так и не присвоился:

window.webkitRequestFileSystem(window.TEMPORARY, 10*1024*1024, function(fs) < fs.root.getFile(file.name, < create: true >, function (fileEntry) < fileEntry.createWriter(function (fileWriter) < fileWriter.onwriteend = function(e) < console.log(‘Успех!’); fs.root.getFile(file.name, <>, function (fileEntry) < fileEntry.file(function (new_file) < console.log(‘Файл успешно записан и прочитан обратно:’); console.dir(new_file); >); >); >; fileWriter.onerror = function(e) < console.log(‘Ошибка:’); console.dir(e); >; fileWriter.write(file); >, function(err) < console.log(‘Ошибка:’); console.dir(err); >); >, function(err) < console.log(‘Ошибка:’); console.dir(err); >); >, function(err) < console.log(‘Ошибка:’); console.dir(err) >);

  • Вопрос задан более года назад
  • 495 просмотров

Комментировать
Решения вопроса 0
Ответы на вопрос 1

gscraft

Программист, философ

Хм, определить MIME можно двумя способами: по расширению файла, если оно указано корректно, и по его содержимому. Если с расширением файла все просто, то файл придется читать, пытаясь сверить первые байты с имеющейся базой сигнатур форматов. Наверняка есть готовые библиотеки.

Ответ написан более года назад

Я вот не нашел готовых библиотек на JavaScript, может вы знаете? Определение типа по формату файла не точное, так как формат не гарантирует тип.

gscraft

Надим Закиров, а Вам это до зарезу нужно? Иногда игра не стоит свеч, и верным путем будет компромиссное решение. Почему бы не определять типы по расширению файла? Или Вы пишете специфический сервис, где, во-первых, возможен подлог, во-вторых, крайняя необходимость достоверно определять типы файлов? В обычном случае можно предположить, что doc, docx и т.д. — соответствуют своему типу.

Источник: qna.habr.com

Статья Определение типа файла по его сигнатуре с помощью Python

Вполне возможно, что при разработке приложений вам может понадобиться определение типа файла. И не всегда тип файла можно узнать по расширению. Если в ОС Linux это не составляет больших проблем, так как данная операционная система распознает тип файла не по расширению, а по содержимому, то вот в Windows отсутствие расширения иногда вызывает множество вопросов. Давайте попробуем понять, как можно определить тип файла с помощью Python.

68416866.jpg

К сожалению, в Python встроенного модуля для определения типа файлов нет. Но есть модули сторонних разработчиков. Да, в стандартной поставке есть mimetypes, однако распознавать содержимое файла без расширения он не умеет.

Из сторонних модулей можно выделить magic. С ее помощью довольно точно можно узнать mime-тип файла. Вот только работа данного модуля завязана на библиотеку libmagic1. То есть, по сути это просто оболочка вокруг данной библиотеки. И для работы модуля требуется ее наличие.

И если в Linux зачастую она установлена по умолчанию, то вот в Windows понадобиться установить библиотеки DLL. Давайте чуть подробнее рассмотрим, что нужно для того, чтобы работать с данным модулем, его установку и требования.

Что понадобиться?

Для начала необходимо установить сам модуль. Поэтому пишем в терминале команду:

pip install python-magic

В принципе, если вы работаете в Linux, установки библиотеки libmagic1 может и не понадобиться. К примеру, в Linux Mint данная библиотека установлена «из коробки». Однако, если, все же, у вас ее нет, то установка библиотеки в Ubuntu/Debian делается командой:

sudo apt-get install libmagic1

Если вы работаете в операционной системе Windows, то нужно установить DLL с помощью команды:

pip install python-magic-bin

Читайте также:
Как задать программу свечи

В принципе, на этом все. Для работы модуля больше ничего особо не требуется.

Определение mime-типа файла с помощью magic

Давайте напишем маленький скрипт, для примера, чтобы понять, как работает данная библиотека.
Импортируем в скрипт нужные модули:

from pathlib import Path import magic

Теперь напишем небольшую функцию из одной строки, которая будет принимать путь к файлу и просто печатать его mime-тип.

def mime_magic(path): print(magic.Magic(mime=True).from_file(path))

И теперь, в функции main, вызовем данную функцию и передадим в нее путь к файлу.

def main(): path = input(«Введите путь к файлу: «) if not Path(path).exists(): print(«Файла не существует!») mime_magic(path) if __name__ == «__main__»: main()
Скрипт в сборе
from pathlib import Path import magic def mime_magic(path): print(magic.Magic(mime=True).from_file(path)) def main(): path = input(«Введите путь к файлу: «) if not Path(path).exists(): print(«Файла не существует!») mime_magic(path) if __name__ == «__main__»: main()

Я специально удалил расширение у файла и передал в функцию путь к нему. И вот, что я получил на выходе:

01.png

Однако, как я уже писал ранее, данный модуль — это только обертка python над библиотекой libmagic1. И здесь, если вы пишите переносимое приложение, придется тащить за собой все остальные зависимости. Проверять, установлена ли библиотека или, в случае с Windows устанавливать библиотеки DLL.

Но, есть еще один, более «хардкорный» путь. Ничего нового в нем нет, но он требует получения сигнатуры файла и сравнения со списком или словарем сигнатур для получения типа файла.

Определение типа файла по его сигнатуре

Понятие сигнатура файла известно так же как «магическое число». Это целочисленная или текстовая константа, с помощью которой можно однозначно идентифицировать ресурс или данные. Само по себе, это число не несет никакого смысла. Примером такого магического числа может служить исполняемый файл Windows с расширением .exe. Он начинается с последовательности байт 0x4D5A, и это само по себе символично, так как соответствует ASCII-символам MZ, которые являются инициалами Марка Збиковски являющегося одним из создателей MS-DOS.

В Linux, как я уже писал выше, тип файла определяется по его содержимому, точнее, по его сигнатуре, вне зависимости от его расширения и названия. Для того, чтобы интерпретировать сигнатуру файла можно использовать стандартную утилиту file.

Как же можно использовать это в скрипте python? Для примера я составил небольшой словарик сигнатур файлов. Конечно же, это только очень маленькая часть от огромного количества самых разнообразных сигнатур. Однако, это уже позволяет определить тип некоторых мультимедийных форматов файлов. Данные сигнатуры были взяты из статьи Википедии по этому

Ссылка скрыта от гостей

. Давайте от теории перейдем к практике.

Для начала импортируем нужные модули в наш скрипт. Здесь нам понадобятся два стандартных модуля: sys и Path из библиотеки pathlib.

import sys from pathlib import Path

Теперь инициализируем словарь с сигнатурами. Конечно же, если бы это был более масштабный проект, имело бы смысл вынести данные сигнатуры в отдельный модуль или json-файл. Но, так как, это лишь пример того, как определить сигнатуру, словарь маленький, а потому выносить его в отдельный модуль не имеет смысла.

signature =

Напишем небольшую функцию, в которой и будет происходить основное действие. Я назвал ее read_file(path). На входе она получает путь к файлу, тип которого требуется определить. А на выходе мы получаем тип файла или сообщение о невозможности определить сигнатуру.

Откроем файл на чтение в байтовом режиме. Считаем первые 256 байт. Этого вполне достаточно для того, чтобы определить тип файла. Переведем полученные данные в шестнадцатеричный вид.

with open(path, ‘rb’) as f: file = f.read(256) hex_bytes = » «.join([».format(byte) for byte in file])

Запустим цикл для итерации по словарю сигнатур. В данном цикле запустим еще один цикл для итерации по полученной сигнатуре с определенным смещением. Сигнатуры типов файлов, которые представлены в моем словаре имею либо нулевое, либо смещение 4 байта. С учетом пробелов, это будет 12 символов.

И дальше сравниваем сигнатуру из словаря с текущим куском байт, со смещением имеющим длину текущей сигнатуры. Если сигнатура найдена, возвращаем сообщение с именем файла и его типом. Если же сигнатура не найдена — возвращаем сообщение о неизвестной сигнатуре.

for hex_ch in signature: for i in [0, 12]: if hex_ch == str(hex_bytes[i:len(hex_ch) + i]): return f’Файл: «» имеет сигнатуру: «» файла’ continue return «Неизвестная сигнатура»

Ну и функция main, в которой получаем путь к файлу и вызываем функцию read_file, в которую передаем полученный путь предварительно проверенный на существование.

def main(): path = input(«Введите путь к файлу: «) if not Path(path).exists(): print(«Файла не существует!») sys.exit(0) print(read_file(path)) if __name__ == «__main__»: main()
Полный код скрипта
import sys from pathlib import Path signature = < «66 74 79 70 33 67»: «3gp, 3gp2», «FF D8 FF E0»: «jpg», «49 46 00 01»: «jpeg», «89 50 4E 47 0D 0A 1A 0A»: «png», «25 50 44 46 2D»: «pdf», «4F 67 67 53»: «ogg, oga, ogv», «52 49 46 46»: «wav», «57 41 56 45»: «wav», «41 56 49 20»: «avi», «FF FB»: «mp3», «FF F3»: «mp3», «FF F2»: «mp3», «49 44 33»: «mp3», «66 4C 61 43»: «flac», «1A 45 DF A3»: «mkv, mka, mks, mk3d, webm», «47»: «ts, tsv, tsa», «00 00 01 BA»: «mpg, mpeg», «00 00 01 B3»: «mpg, mpeg», «66 74 79 70 4D 53 4E 56»: «mp4», «66 74 79 70 69 73 6F 6D»: «mp4», «66 74 79 70 6D 70 34 32»: «m4v» >def read_file(path: str) -> str: «»» Получение сигнатуры файла. Итерация по словарю сигнатур и сравнение их с полученной сигнатурой в соответствии со смещением. :param path: Путь к файлу. :return: Строка, тип файла или сообщение о неизвестной сигнатуре. «»» with open(path, ‘rb’) as f: file = f.read(256) hex_bytes = » «.join([».format(byte) for byte in file]) for hex_ch in signature: for i in [0, 12]: if hex_ch == str(hex_bytes[i:len(hex_ch) + i]): return f’Файл: «» имеет сигнатуру: «» файла’ continue return «Неизвестная сигнатура» def main(): path = input(«Введите путь к файлу: «) if not Path(path).exists(): print(«Файла не существует!») sys.exit(0) print(read_file(path)) if __name__ == «__main__»: main()

Для теста я выбрал файл mp3 без расширения и файл mp4 скачанный с YouTube. И вот что у меня получилось:

02.png

03.png

04.png

Как видно из вышеприведенных примеров, определение файла по его сигнатуре работает успешно. Однако, для использования в серьезных проектах, думаю, что словарь со списком сигнатур следует несколько видоизменить и добавить группу сигнатур, которая будет определятся смещением, чтобы при итерации считывать смещение из самого словаря.

А на этом пожалуй все.

Спасибо за внимание. Надеюсь, что данная информация будет вам полезна

Источник: codeby.net

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru