ファイルが与えられたプロジェクトがあり、ファイルから文字列を抽出する必要があります。基本的には Linux の "strings" コマンドを考えますが、私はこれを Python で行っています。次の条件は、ファイルがストリーム (文字列など) として渡されることです。そのため、サブプロセス関数の 1 つを使用して文字列を実行するという明白な答えもオプションではありません。
私はこのコードを書きました:
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
これは技術的には機能しますが、かなり遅いです。たとえば、strings コマンドを 500Meg 実行可能ファイルで使用することができ、1 秒未満で 300k 相当の文字列を生成しました。上記のコードで同じファイルを実行したところ、16 分かかりました。
Python の遅延の負担なしでこれを実行できるライブラリはありますか?
ありがとう!