我知道也有类似的线索,我也看过,但它们对我的案子没有帮助:
不久前,我保存了两个.thumbdata3文件,每个文件的大小约为500mb。This stackexchange thread声称我可以使用python脚本从文件中提取小jpeg:
#!/usr/bin/python
"""extract files from Android thumbdata3 file"""
f=open('thumbdata3.dat','rb')
tdata = f.read()
f.close()
ss = '\xff\xd8'
se = '\xff\xd9'
count = 0
start = 0
while True:
x1 = tdata.find(ss,start)
if x1 < 0:
break
x2 = tdata.find(se,x1)
jpg = tdata[x1:x2+1]
count += 1
fname = 'extracted%d03.jpg' % (count)
fw = open(fname,'wb')
fw.write(jpg)
fw.close()
start = x2+2
但是它返回了以下错误:
^{pr2}$在四处搜索之后,我认为错误可能在使用2.7和3.5方法之间,并将f.open函数中的'rb'改为'r',结果得到了这个错误:
Traceback (most recent call last):
File "...\Thumbdata\thumbadata extract.py", line 6, in <module>
tdata = f.read()
File "...\Anaconda3\lib\encodings\cp1252.py", line 23, in decode
return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x81 in position 277960004: character maps to <undefined>
值得一提的是,脚本和文件都在同一个文件夹中。我在Python运行包和Anaconda3中使用Atom。在
感谢任何帮助。在
必须在f=open('thumbdata3.dat','rb')中继续使用rb模式读取二进制数据。在
问题是f是一个二进制流,那么find函数需要一个字节类型的参数,这在Python3中是新的。在
ss和se被指定为字符串值,因此其类型为string(我猜ss和se代表字符串开始和结束)。在
您需要使用encode()函数将这些字符串编码为二进制类型:
请测试并评论输出,以确保它能工作。在
相关问题 更多 >
编程相关推荐