【发布时间】:2011-08-04 19:37:55
【问题描述】:
我正在使用 python 加密一些文件,但我在逐块读取文件时遇到问题。
有时它不会返回最后一个块的所有数据。
当文件长度为 307200 字节时,我没有问题。 当它的长度为 279363 字节时,我会这样做。
我在 2 个文件(分别为 307200 和 279363 字节大)上运行了这段代码
chunksize = 65536
w = open(filename + '.' + str(cs) + '.split', 'wb')
tdata = f.read(307200)
w.write(tdata)
w.close
infile.open(filename + '.' + str(cs) + '.split', 'rb')
while True:
chunk = infile.read(chunksize)
print "Chunk length: " + str(len(chunk))
if len(chunk) == 0:
break
elif len(chunk) % 16 != 0:
chunk += ' ' * (16 - len(chunk) % 16)
我得到了这个:
文件 1 (307200): 块长度:65536 块长度:65536 块长度:65536 块长度:65536 块长度:45056 块长度:0 文件 2 (279363): 块长度:65536 块长度:65536 块长度:65536 块长度:65536 块长度:16384 块长度:0如您所见,第一个文件的所有块大小的总和是正确的,第二个文件的总和是错误的。我不知道为什么。
我的 Python 版本是 2.6.5
(在 Ubuntu 10.04.2 LTS 上运行)
*编辑:我自己的愚蠢错误。在阅读我刚刚编写的文件之前,我使用了w.close 而不是w.close(),这导致了问题。
【问题讨论】:
-
您是否考虑过输入文件本身?什么样的内容,编码等等。
-
删除加密代码是否有效?也就是说,如果你所做的只是复制文件,你的代码是否有效?
-
这在 Python 2.6.1 上对我有用 - 你最好说明你的操作系统、Python 版本和 CPU 架构 - 以及文件内容的性质(我刚刚重新记录了一个 279363 字节的 "\xaa"s 文件)