提取Android thumbdata3文件时遇TypeError错误求助
解决.thumbdata3提取图片时的TypeError问题
嘿,我来帮你搞定这个「需要类字节对象,而非'str'」的错误!这个问题其实很好解决,根源就在字符串和字节对象的类型不匹配上。
错误原因分析
你用rb模式读取.thumbdata3文件,得到的tdata是字节对象(bytes),但原脚本里的JPG起始标记ss = '\xff\xd8'和结束标记se = '\xff\xd9'是普通字符串(str)。字节对象的find()方法只能接受字节类型的参数,直接用字符串去查找自然会触发TypeError。
修改后的完整Python脚本
把标记改成字节类型(加b前缀),同时补全原脚本没写完的保存逻辑:
#!/usr/bin/python """extract files from Android thumbdata3 file""" f = open('thumbdata3.dat', 'rb') tdata = f.read() f.close() # 将字符串标记改为字节类型 ss = b'\xff\xd8' se = b'\xff\xd9' count = 0 start = 0 while True: x1 = tdata.find(ss, start) if x1 < 0: break x2 = tdata.find(se, x1) if x2 < 0: break # 提取JPG片段并保存 jpg = tdata[x1:x2+2] count += 1 filename = f'extracted_{count}.jpg' with open(filename, 'wb') as outfile: outfile.write(jpg) # 更新起始位置,继续查找下一张图 start = x2 + 2 print(f'提取完成,共生成{count}张图片')
几个实用小提示
- 确保脚本和你的
.thumbdata3文件在同一个文件夹里,或者把'thumbdata3.dat'改成文件的完整路径(比如'C:/Users/xxx/Documents/thumbdata3.dat') - 500MB的文件用
read()一次性读取没问题,如果是更大的文件,可以考虑分块读取来优化内存占用 - 提取出的图片会以
extracted_1.jpg、extracted_2.jpg这样的命名保存在脚本所在目录
内容的提问来源于stack exchange,提问作者Todd Munyon
相关产品推荐
相关产品推荐

