我正在使用python 3读取原始磁盘映像。我的任务是从磁盘映像中检索(雕刻)jpg作为单个文件。据我了解,jpg的标头模式(\xd8\xff\xe0
或\xd8\xff\xe1
)。我想知道读取文件时从哪里得到的。
fobj = open('carve.dd', 'rb')
data = fobj.read(32)
while data != '':
head_loc = findheader(data)
print(head_loc)
data = fobj.read(32)
def findheader(data) : # to find header in each 32 bytes of data of raw disk image
for i in range(0, len(data) - 3) :
if data[i] == b'\xff' :
if data[i+1:i+4] == b'\xd8\xff\xe0' or data[i+1:i+4] == b'\xd8\xff\xe1' :
return i
return -1
相同的代码在Python 2中正常工作。在Python 2中,我能够在几秒钟内从图像获取标头。有人可以帮帮我吗,Python 3有什么问题?
此代码段实际上来自此https://github.com/darth-cheney/JPEG-Recover/blob/master/jpegrecover2.py在Python 2中可以正常运行,但在Python 3中则不能。在链接中运行代码时,请不要忘记出现不一致的制表符错误。我再次输入VS代码。
[就像俗话说的那样,我有一些坏消息和一些好消息。不好的是,我无法弄清楚为什么您的代码在Python的第2版和第3版中都无法正常工作。
好处是,我能够使用您提供的示例数据来重现问题,但更重要的是-能够设计出不仅在两个版本中均能始终如一地工作的东西,而且可能更快地[[多]],因为它不会t使用for
循环搜索每个数据块以查找.jpg标头模式。def findheader(data): # to find header in each 32 bytes of data of raw disk image
try:
return data.index(b'\xff\xd8\xff\xe0')
except ValueError:
try:
return data.index(b'\xff\xd8\xff\xe1')
except ValueError:
return -1