我有一個項目,我給了一個文件,我需要從文件中提取字符串。基本上想到在Linux中的「字符串」命令,但我在python中這樣做。下一個條件是文件以流(例如字符串)的形式提供給我,所以使用其中一個子進程函數運行字符串的明顯答案也不是一個選項。從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延遲的情況下執行此操作嗎?
謝謝!
如果您可以閱讀C [GNU字符串的源代碼](http://sourceware.org /cgi-bin/cvsweb.cgi/src/binutils/strings.c?rev=1.48&content-type=text/x-cvsweb-markup&cvsroot=src)可能會有幫助。它只有幾百行,所以沒那麼糟糕。 –