0

我正在阅读也有一些 ASCII 文本的 EXE(大小为 2 MB)。尝试根据匹配的条件检索数据。在 Python 2.6 中,以下代码工作正常(在 2 秒内给我结果),但在 3.2 中却不行。在 Python 3.2 中,它一直运行没有响应。

谢谢...

match_str = b"sape"
out= ""
try:
    file_obj = open(exe_filePath,'rb')

    while 1:
        data = file_obj.readline(100)

        if data.count(match_str) > 0:               
            out = data.strip()[9:13]                
        if data=="":
            break

    file_obj.close()
    return out
except:
    file_obj.close()
    raise "Some error occurred"
4

1 回答 1

1
if data=="":
    break

将永远失败(意味着break永远不会发生),因为

>>> b"" == ""
False

并且data是一个bytes对象。

如果您将其更改为

if data==b"":
    break

它应该工作。尽管这里还有许多其他问题需要解决(请参阅我对您问题的评论)。

我建议这样做:

match_str = b"sape"
with open(exe_filePath,'rb') as file_obj: 
    while True:
        data = file_obj.readline(100)
        if data.count(match_str) > 0:
            # This will overwrite any previous "out" from the last match!
            # Do you really want that?
            out = data.strip()[9:13]
        if data==b"":
            break
return out
于 2012-06-28T09:44:28.063 回答