Comment puis-je savoir si un fichier est binaire (non textuel) en python?
Je recherche dans un grand nombre de fichiers en python et continue à obtenir des correspondances dans des fichiers binaires. Cela rend la sortie incroyablement désordonnée.
Je sais que je pourrais utiliser grep -I
, mais je fais plus avec les données que ce que permet grep.
Dans le passé, j'aurais simplement cherché des personnages plus grands que 0x7f
, mais utf8
et autres, cela rendait cela impossible sur les systèmes modernes. Idéalement, la solution serait rapide, mais n'importe quelle solution fera l'affaire.
grep
utilisée pour identifier les fichiers binaires est similaire à celle publiée par Jorge Orpinel ci-dessous . Sauf si vous définissez l' -z
option, il recherchera simplement un caractère nul ( "\000"
) dans le fichier. Avec -z
, il recherche "\200"
. Les personnes intéressées et / ou sceptiques peuvent consulter la ligne 1126 de grep.c
. Désolé, je n'ai pas trouvé de page Web avec le code source, mais vous pouvez bien sûr l'obtenir à partir de gnu.org ou via une distribution .
git diff
GNU et GNU diff
utilisent également la même stratégie. Je ne sais pas si c'est si répandu parce que c'est tellement plus rapide et plus facile que l'alternative, ou si c'est simplement à cause de la rareté relative des fichiers UTF-16 sur les systèmes qui ont tendance à avoir ces utilitaires installés.