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)。
我正在尝试以二进制形式读取 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)。