逐 block 读取文件时Python不返回所有数据

标签 python file-io chunking

我正在使用 python 加密一些文件,但我在逐 block 读取文件时遇到问题。

有时不会返回最后一个 block 的所有数据。

当文件长度为 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)

我得到了这个:

File 1 (307200):
Chunk length: 65536
Chunk length: 65536
Chunk length: 65536
Chunk length: 65536
Chunk length: 45056
Chunk length: 0

File 2 (279363):
Chunk length: 65536
Chunk length: 65536
Chunk length: 65536
Chunk length: 65536
Chunk length: 16384
Chunk length: 0

如您所见,第一个文件的所有 block 大小的总和是正确的,第二个文件的总和是错误的。我不知道为什么。

我的Python版本是2.6.5
(在 Ubuntu 10.04.2 LTS 上运行)

*编辑:我自己的愚蠢错误。在读取我刚刚编写的文件之前,我使用了 w.close 而不是 w.close(),这导致了问题。

最佳答案

您在 Windows 上运行吗?如果是这样,您可能需要 open your files in binary mode :

infile = open('somefile','rb')

关于逐 block 读取文件时Python不返回所有数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5651425/

相关文章:

javascript - 如何在 Python Selenium 中输入自动填充的文本字段

python - 在 python 中关闭套接字

spring-batch - Spring Batch 中的 block 读取 - 不仅是 block 写入

django - 使用 Models FileField save() 对上传文件大小超过 2.5 MB 的文件进行分块

nlp - 最好的交 key 关系检测库?

python - numpy 数组的形状

python - sqlite - 使用两列的倍数的 WHERE 语句

c - 二进制文件处理 - fseek() 到结构内的某个字段

python - 将一个文件中的特定行写入另一个文件

c++ - 执行系统命令很慢