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 utf8e simili , lo avrei reso impossibile sui sistemi moderni. Idealmente la soluzione sarebbe veloce, ma qualsiasi soluzione andrà bene.
grepessa stessa utilizza per identificare i file binari è simile a quella pubblicata da Jorge Orpinel di seguito . A meno che non imposti l' -zopzione, 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 diffGNU che entrambi diffusano 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.