¿Cómo puedo saber si un archivo es binario (sin texto) en Python?
Estoy buscando en un gran conjunto de archivos en Python y sigo obteniendo coincidencias en archivos binarios. Esto hace que la salida se vea increíblemente desordenada.
Sé que podría usar grep -I
, pero estoy haciendo más con los datos de lo que permite grep.
En el pasado, solo hubiera buscado caracteres más grandes que 0x7f
, pero utf8
y similares, lo hacen imposible en los sistemas modernos. Idealmente, la solución sería rápida, pero cualquier solución servirá.
grep
sí misma utiliza para identificar archivos binarios es similar a la publicada por Jorge Orpinel a continuación . A menos que establezca la -z
opción, solo buscará un carácter nulo ( "\000"
) en el archivo. Con -z
, busca "\200"
. Los interesados y / o escépticos pueden consultar la línea 1126 de grep.c
. Lo siento, no pude encontrar una página web con el código fuente, pero, por supuesto, puede obtenerlo en gnu.org o mediante una distribución .
git diff
GNU como diff
también utilizan la misma estrategia. No estoy seguro de si es tan frecuente porque es mucho más rápido y más fácil que la alternativa, o si es simplemente por la relativa rareza de los archivos UTF-16 en los sistemas que tienden a tener estas utilidades instaladas.