以下は、 で検出された長さが >= min
(デフォルトでは 4)の印刷可能な文字のすべての文字列を生成するジェネレータfilename
です。
import string
def strings(filename, min=4):
with open(filename, errors="ignore") as f: # Python 3.x
# with open(filename, "rb") as f: # Python 2.x
result = ""
for c in f.read():
if c in string.printable:
result += c
continue
if len(result) >= min:
yield result
result = ""
if len(result) >= min: # catch result at EOF
yield result
あなたが繰り返すことができるもの:
for s in strings("something.bin"):
# do something with s
...またはリストに保存します:
sl = list(strings("something.bin"))
strings
これを非常に簡単にテストしましたが、選択した任意のバイナリ ファイルに対してUnix コマンドと同じ出力が得られるようです。ただし、これは非常にナイーブで (最初は、ファイル全体を一度にメモリに読み込むため、大きなファイルではコストがかかる可能性があります)、Unixstrings
コマンドのパフォーマンスに近づく可能性はほとんどありません。