Идентификация неизвестного формата файла может быть проблемой.Но у вас есть несколько вариантов.Я начну с очень очевидного.
Ask
Показ других людей о формате - возможно, лучший способ узнать его имя.Кто-то, вероятно, узнает это.И если никто этого не делает, велика вероятность, что перед вами проприетарный формат файла.
В случае с вашим файлом репозитория yum я бы сказал, что это обычный старый INI-файл.Но давайте проведем еще несколько исследований по этому вопросу.
Реверс-инжиниринг
Реверс-инжиниринг, возможно, ваш лучший выбор, если никто не узнает ваш формат.Возьмите эталонную реализацию и выясните, что они используют для разбора формата.К счастью, Yum с открытым исходным кодом.Так что легко смотреть вверх.Давайте посмотрим, что авторы yum используют для анализа своего репо-файла:
try:
ini = INIConfig(open(repo.repofile))
except:
return None
https://github.com/rpm-software-management/yum/blob/master/yum/config.py#L1304
Теперь импорт этой функции можно найти здесь:
from iniparse import INIConfig
https://github.com/rpm-software-management/yum/blob/master/yum/config.py#L32
Это приводит нас к библиотеке под названием iniparse (https://pypi.org/project/iniparse/). Так что yum использует INI-парсер для своих файлов конфигурации.
Я покажу вам, как быстропереходите к подобным фрагментам кода, поскольку навигация в некоторых крупных проектах может быть пугающей.
Я использую инструмент под названием ripgrep (https://github.com/BurntSushi/ripgrep).. Мои начальные привязки обычно являются хорошо известными путями к файлам. В случае yum,Я взял /etc/yum.repos.d
для моего первоначального поиска:
# assuming you are in the root directory of yum's source code
rg /etc/yum.repos.d yum
yum/config.py
769: reposdir = ListOption(['/etc/yum/repos.d', '/etc/yum.repos.d'])
yum/__init__.py
556: # (typically /etc/yum/repos.d)
Это сузит его до двух файлов. Если вы продолжите с такими терминами, как read
или parse
, вы быстро найдете результаты, которые выwant.
Что если у вас нет ссылочного источника?
Ну, иногда у вас нет доступа к исходному коду ссылочной реализации. Например: ссылочная реализация является закрытым исходным кодом.Попробуйте сломать формат. Вставьте немногомусора и наблюдать за файлами журналов впоследствии.Если вам повезет, вы можете найти полезное сообщение об ошибке, которое может дать вам подсказки о формате.Если вы чувствуете себя очень смелым, вы можете попробовать использовать и настоящий декомпилятор.Это может или не может быть незаконным и может или не может быть пустой тратой времени.Лично я бы сделал это только в крайнем случае.