Python'da bir dosyanın ikili (metin dışı) olup olmadığını nasıl anlarım?
Python'da büyük bir dosya kümesinde arama yapıyorum ve ikili dosyalarda eşleşmeler almaya devam ediyorum. Bu, çıktının inanılmaz derecede dağınık görünmesine neden olur.
Kullanabileceğimi biliyorum grep -I
, ancak verilerle grep'in izin verdiğinden daha fazlasını yapıyorum.
Geçmişte, bundan daha büyük karakterleri arardım 0x7f
, ama utf8
ve benzeri, modern sistemlerde bunu imkansız kılıyor. İdeal olarak çözüm hızlı olacaktır, ancak herhangi bir çözüm işe yarar.
grep
İkili dosyaları tanımlamak için kullandığı strateji, aşağıdaki Jorge Orpinel tarafından yayınlanan stratejiye benzer . -z
Seçeneği belirlemediğiniz sürece "\000"
, dosyada yalnızca bir boş karakter ( ) tarayacaktır . İle -z
tarar "\200"
. İlgilenenler ve / veya şüpheciler 1126 numaralı satıra bakabilirler grep.c
. Maalesef kaynak kodunu içeren bir web sayfası bulamadım, ama tabii ki onu gnu.org'dan veya bir dağıtımdan edinebilirsiniz .
git diff
GNU hem diff
de aynı stratejiyi kullanır. Bu kadar yaygın olup olmadığından emin değilim çünkü alternatifinden çok daha hızlı ve daha kolay mı yoksa sadece bu araçların kurulu olma eğiliminde olan sistemlerdeki UTF-16 dosyalarının göreceli nadirliği nedeniyle mi?