打开时不读取文件的最后一个块

时间:2012-10-20 19:35:09

标签: python file-io buffer

我正在尝试逐个阅读文件:

def buf_read2(filename, buffer_size):

    with open(filename, 'rb') as f:
        buffer = f.read(buffer_size)

        print buffer  # and do other stuff with it

这不会读取文件的最后一个块。例如,如果文件是129个字节并且我将buffer_size设置为128,则不会读取最后一个字节。

这种古老的学校方法虽然有效:

def buf_read1(filename, buffer_size):

    f = open(filename, 'rb')
    while True:
        buffer = f.read(buffer_size)
        if not buffer:
            break

        print buffer  # and do other stuff with it

    f.close()

我做错了什么?

1 个答案:

答案 0 :(得分:4)

with不是循环,因此在您的第一个示例中,read()只会被调用一次。

你仍然需要包含一个循环:

with open(filename, 'rb') as f:
    while True:
        buffer = f.read(buffer_size)
        if not buffer:
            break
        print buffer  # and do other stuff with it