извлечение строк из двоичного файла в python

У меня есть проект, в котором мне дан файл, и мне нужно извлечь строки из файла. В основном подумайте о команде "strings" в Linux, но я делаю это в 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

Технически это работает, но ОЧЕНЬ медленно. Например, я смог использовать команду strings для исполняемого файла объемом 500Meg, и он произвел 300k строк менее чем за 1 секунду. Я пропустил тот же файл через указанный выше код, и это заняло 16 минут.

Есть ли библиотека, которая позволила бы мне сделать это без нагрузки, связанной с задержкой Python?

Спасибо!

6
задан tjac 24 July 2011 в 02:24
поделиться