Come posso sapere se un file è binario (non di testo) in Python?
Sto cercando in un ampio set di file in Python e continuo a ricevere corrispondenze nei file binari. Questo rende l'output incredibilmente disordinato.
So che potrei usare grep -I
, ma sto facendo di più con i dati di quanto consente grep.
In passato, avrei cercato solo caratteri più grandi di 0x7f
, ma utf8
e simili , lo avrei reso impossibile sui sistemi moderni. Idealmente la soluzione sarebbe veloce, ma qualsiasi soluzione andrà bene.
grep
essa stessa utilizza per identificare i file binari è simile a quella pubblicata da Jorge Orpinel di seguito . A meno che non imposti l' -z
opzione, cercherà solo un carattere nullo ( "\000"
) nel file. Con -z
, esegue la scansione "\200"
. Chi fosse interessato e / o scettico può consultare la linea 1126 del grep.c
. Mi spiace, non sono riuscito a trovare una pagina web con il codice sorgente, ma ovviamente puoi ottenerlo da gnu.org o tramite una distribuzione .
git diff
GNU che entrambi diff
usano la stessa strategia. Non sono sicuro che sia così diffuso perché è molto più veloce e più facile dell'alternativa, o se è solo a causa della relativa rarità dei file UTF-16 su sistemi che tendono ad avere queste utilità installate.