Pythonでファイルがバイナリ(非テキスト)かどうかを確認するにはどうすればよいですか?
私はpythonで大量のファイルセットを検索していて、バイナリファイルで一致を取得し続けています。これにより、出力が非常に乱雑に見えます。
を使用できることはわかっgrep -Iていますが、grepで許可されている以上のデータを使用しています。
以前は、を超える文字を検索しただけでした0x7fがutf8、現代のシステムではこれを不可能にしていました。理想的にはソリューションは高速ですが、どのソリューションでも十分です。
grepそれ自体がバイナリファイルを識別するために使用する戦略は、以下の Jorge Orpinelによって投稿されたものと似ています。この-zオプションを設定しない限り"\000"、ファイル内のnull文字()がスキャンされるだけです。では-z、をスキャンし"\200"ます。興味がある人や懐疑的な人は、1126行目を確認できgrep.cます。ソースコードのあるウェブページは見つかりませんでしたが、もちろん、gnu.orgまたはディストリビューションから入手できます。
git diffとGNU diffも同じ戦略を使用します。他の方法よりもはるかに高速で簡単であるために普及しているのか、またはこれらのユーティリティがインストールされているシステム上のUTF-16ファイルが比較的希少であるためだけなのか、私にはわかりません。