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 utf8e assim por diante, tornam isso impossível em sistemas modernos. Idealmente, a solução seria rápida, mas qualquer solução serve.
grepse utiliza para identificar arquivos binários é semelhante à postada por Jorge Orpinel abaixo . A menos que você defina a -zopçã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 diffe o GNU difftambé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.