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