Como posso saber se um arquivo é binário (não texto) em python?
Estou pesquisando um grande conjunto de arquivos em python e continuo obtendo correspondências em arquivos binários. Isso faz com que a saída pareça incrivelmente confusa.
Eu sei que poderia usar grep -I
, mas estou fazendo mais com os dados do que o grep permite.
No passado, eu teria apenas procurado por caracteres maiores do que 0x7f
, mas utf8
e assim por diante, tornam isso impossível em sistemas modernos. Idealmente, a solução seria rápida, mas qualquer solução serve.
grep
se utiliza para identificar arquivos binários é semelhante à postada por Jorge Orpinel abaixo . A menos que você defina a -z
opção, ele irá apenas procurar um caractere nulo ( "\000"
) no arquivo. Com -z
, ele procura "\200"
. Os interessados e / ou céticos podem verificar a linha 1126 de grep.c
. Não consegui encontrar uma página da web com o código-fonte, mas é claro que você pode obtê-la em gnu.org ou em uma distro .
git diff
e o GNU diff
também usam a mesma estratégia. Não tenho certeza se é tão predominante porque é muito mais rápido e fácil do que a alternativa, ou se é apenas por causa da relativa raridade de arquivos UTF-16 em sistemas que tendem a ter esses utilitários instalados.