Python, EOF 二进制

Python, EOF binary

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

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

print "EOF"

过去一个小时我一直在尝试这个,我从来没有到达文件的末尾,即使是在很小的文本文件中也是如此。我做了一个 "print test = file.read(4)" 只看到它打印了 ""

我怎样才能确保它停止?我的第一个想法是做一个 if 语句说 if file.read(4) (in a variable) == ""{4} 之类的,但这实际上可能出现在文件中,对吧?所以它可能会停在中间。

是唯一预先计算文件大小的选项吗?

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

检查file.read的return值;如果为空则中断:

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

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

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