Jak mogę sprawdzić, czy plik jest binarny (nietekstowy) w Pythonie?
Przeszukuję duży zestaw plików w Pythonie i ciągle otrzymuję dopasowania w plikach binarnych. To sprawia, że wydruk wygląda niesamowicie niechlujnie.
Wiem, że mógłbym użyć grep -I
, ale robię więcej z danymi, niż pozwala na to grep.
W przeszłości szukałbym po prostu znaków większych niż 0x7f
, ale utf8
i tym podobnych, uniemożliwiających to w nowoczesnych systemach. Idealnie rozwiązanie byłoby szybkie, ale każde rozwiązanie wystarczy.
grep
używa się do identyfikacji plików binarnych, jest podobna do tej opublikowanej przez Jorge Orpinela poniżej . O ile nie ustawisz tej -z
opcji, po prostu skanuje w poszukiwaniu znaku null ( "\000"
) w pliku. Dzięki -z
temu skanuje w poszukiwaniu plików "\200"
. Zainteresowani i / lub sceptyczni mogą sprawdzić linię 1126 of grep.c
. Przepraszamy, nie mogłem znaleźć strony internetowej z kodem źródłowym, ale oczywiście możesz ją pobrać z gnu.org lub za pośrednictwem dystrybucji .
git diff
i GNU diff
również używają tej samej strategii. Nie jestem pewien, czy jest tak powszechny, ponieważ jest o wiele szybszy i łatwiejszy niż alternatywa, czy też jest to spowodowane względną rzadkością plików UTF-16 w systemach, które mają zwykle zainstalowane te narzędzia.