逐个读取文件时,Python不会返回所有数据

问题描述

| 我正在使用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
而不是ѭ2and,这引起了问题。     

解决方法

您在Windows上运行吗?如果是这样,您可能需要以二进制模式打开文件:
infile = open(\'somefile\',\'rb\')
    ,我现在感到非常愚蠢,但是我很高兴没有其他人注意到相同的问题。 我打电话给w.close,而不是w.close()     ,这很奇怪。 您是否从名称\'filename \'的文件中创建了第二个文件作为第一个文件,并将307200替换为279363? 顺便说一下,它是文件名的奇怪扩展名:\'。split \' 。 我建议您运行以下代码:
from os.path import getsize

chunksize = 65536

for x in xrange(279363,307201):
    w = open(filename + \'.\' + str(cs) + \'.split\',\'wb\')
    tdata = f.read(x)
    w.write(tdata)
    w.close

    siz = getsize(filename + \'.\' + str(cs) + \'.split\')
    if siz!=x:
        print \'file has not the right size\'
        print \'x==\'+str(x)+\'   size of created file : \'+str(siz)

    infile.open(filename + \'.\' + str(cs) + \'.split\',\'rb\')

    li = []
    while True:
        chunk = infile.read(chunksize)
        li.append(str(len(chunk)))
        if len(chunk) == 0:
            break

    if sum(li)==x:
        print \'good at \'+str(x)
        break
也尝试一下
from os import fsync

chunksize = 65536 
w = open(filename + \'.\' + str(cs) + \'.split\',\'wb\') 
tdata = f.read(307200) 
w.write(tdata)
w.flush()
fsync(w.fileno())
w.close 
    

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...