私はファイルを与えられたプロジェクトを持っています。ファイルから文字列を抽出する必要があります。基本的にはlinuxの "strings"コマンドを考えるが、私はこれをPythonでやっている。次の条件は、ファイルがストリーム(例えば文字列)として私に与えられているので、サブプロセス関数の1つを使って文字列を実行するという明白な答えはオプションでもありません。Pythonのバイナリファイルから文字列を抽出します
私はこのコードを書いた:
def isStringChar(ch):
if ord(ch) >= ord('a') and ord(ch) <= ord('z'): return True
if ord(ch) >= ord('A') and ord(ch) <= ord('Z'): return True
if ord(ch) >= ord('0') and ord(ch) <= ord('9'): return True
if ch in ['/', '-', ':', '.', ',', '_', '$', '%', '\'', '(', ')', '[', ']', '<', '>', ' ']: return True
# default out
return False
def process(stream):
dwStreamLen = len(stream)
if dwStreamLen < 4: return None
dwIndex = 0;
strString = ''
for ch in stream:
if isStringChar(ch) == False:
if len(strString) > 4:
#print strString
strString = ''
else:
strString += ch
これは技術的に動作しますが、WAY遅いです。たとえば、500Megの実行ファイルでstringsコマンドを使用することができ、1秒未満で300k相当の文字列を生成しました。私は上記のコードで同じファイルを実行し、16分かかった。
Pythonの待ち時間の負担なしにこれを行うことができるライブラリがありますか?
ありがとう!
[GNU文字列のソースコード](http://sourceware.org /cgi-bin/cvsweb.cgi/src/binutils/strings.c?rev=1.48&content-type=text/x-cvsweb-markup&cvsroot=src)が役に立ちます。ほんの数百行しかないので、それほど悪くはありません。 –