Как я могу определить, является ли файл двоичным (не текстовым) в Python?
Я просматриваю большой набор файлов на Python и продолжаю получать совпадения в двоичных файлах. Это делает вывод невероятно беспорядочным.
Я знаю, что могу использовать grep -I, но я делаю с данными больше, чем позволяет grep.
Раньше я просто искал символы старше 0x7f, но utf8и тому подобное, что делало это невозможным в современных системах. В идеале решение должно быть быстрым, но подойдет любое решение.
grepсама использует для идентификации двоичных файлов, аналогична стратегии, опубликованной Хорхе Орпинелем ниже . Если вы не установите этот -zпараметр, он будет просто сканировать нулевой символ ( "\000") в файле. С -z, он сканирует файлы "\200". Заинтересованные и / или скептически настроенные могут проверить строку 1126 оф grep.c. К сожалению, мне не удалось найти веб-страницу с исходным кодом, но, конечно, вы можете получить ее с gnu.org или через дистрибутив .
git diffи GNU, и GNU diffтакже используют одну и ту же стратегию. Я не уверен, настолько ли он распространен, потому что он намного быстрее и проще, чем альтернатива, или это просто из-за относительной редкости файлов UTF-16 в системах, в которых, как правило, установлены эти утилиты.