Python,EOF二进制文件

时间:2017-01-17 13:37:38

标签: python binary eof

我正在尝试将python中的文件读取为二进制文件。 我一次对四个字节感兴趣,但是我似乎陷入臭名昭着的while循环:

with open(filename, "rb") as file:
      while file:
            file.read(4)

print "EOF"

过去一小时我一直在尝试这个,即使在微小的文本文件中,我也从未到达文件的末尾。我做了一个“print test = file.read(4)”只是为了看它打印“”

如何确保停止?我的第一个想法是制作一个if语句,说明file.read(4)(在一个变量中)==“”{4}什么的,但这实际上可能出现在一个文件中,对吗?所以它可能会停在它的中间。

预先计算文件大小的唯一其他选项是什么?

2 个答案:

答案 0 :(得分:2)

在文件末尾,file.read(..)将返回一个字节(或字符串,具体取决于您的python版本):

检查file.read的返回值;如果它是空的,请打破:

with open(filename, "rb") as file:
    while True:  # --> replaced `file` with `True` to be clear
        data = file.read(4)
        if not data:  # empty => EOF
        # OR   if len(data) < 4: if you don't want last incomplete chunk
            break
        # process data

答案 1 :(得分:1)

file是一个_io.BufferReader对象,而不是None,因此永远不会被视为False

您应该检查file.read(4)的返回值是否为空字符串(视为False)。