Як я можу визначити, чи файл є бінарним (нетекстовим) у python?
Я шукаю великий набір файлів у python і продовжую отримувати збіги у бінарних файлах. Це робить висновок неймовірно безладним.
Я знаю, що міг би скористатися grep -I
, але я більше роблю дані, ніж те, що дозволяє grep.
У минулому я би просто шукав символів, більших за 0x7f
, але utf8
подібні, роблять це неможливим у сучасних системах. В ідеалі рішення було б швидким, але будь-яке рішення буде.
grep
сама використовується для ідентифікації бінарних файлів, схожа на таку, яку розмістив Jorge Orpinel нижче . Якщо ви не встановите цю -z
опцію, вона просто сканує нульовий символ ( "\000"
) у файлі. З -z
, він сканує "\200"
. Зацікавлені та / або скептично можуть перевірити рядок 1126 grep.c
. На жаль, не вдалося знайти веб-сторінку з вихідним кодом, але, звичайно, ви можете отримати її з gnu.org або через дистрибутив .
git diff
і GNU diff
також використовують однакову стратегію. Я не впевнений, чи є вона настільки поширеною, тому що це набагато швидше і простіше, ніж альтернатива, або якщо це лише через відносну рідкість файлів UTF-16 в системах, на яких встановлені ці утиліти.