我有一个相当大的文件(32 GB),它是使用dd创建的SD卡的映像。 我怀疑文件从某个点开始是空的(即用空字节\ x00填充)。
我通过以下方式使用python进行了检查(其中f是一个打开的文件句柄,光标位于我可以找到数据的最后位置):
for i in xrange(512):
if set(f.read(64*1048576))!=set(['\x00']):
print i
break
这很好(实际上,它在图像的最后显示了一些数据),但是花费了超过9分钟的时间。
有人有更好的方法吗?我敢肯定,肯定有一种更快的方法,但是想不到。
答案 0 :(得分:1)
看着guide about memory buffers in python here,我怀疑比较器本身就是问题所在。在大多数非类型化语言中,内存拷贝尽管会降低性能,但却不是很明显。
在这种情况下,如Oded R.建立的那样,从读取中创建缓冲区并将结果与先前准备的nul
填充的缓冲区进行比较会更加有效。
size = 512
data = bytearray(size)
cmp = bytearray(size)
阅读时:
f = open(FILENAME, 'rb')
f.readinto(data)
需要考虑的两件事是:
这里两个缓冲区的比较将很快,并且不会尝试将字节转换为字符串(我们不需要),并且由于我们一直在重复使用相同的内存,因此垃圾收集器不会还有很多工作...:)