您没有考虑蛇皮… Python不是C。
首先,回顾一下:
如果文件读取方法位于EOF处,则返回''
。其他类型的“ file like”方法(如StringIO,socket.makefile等)也使用了相同类型的EOF测试。最肯定的是,返回小于n
字节的f.read(n)
内容不是EOF的决定性测试!尽管该代码可以工作99.99%时间,是无法工作的时间,这将使您非常沮丧。再加上,它是不良的Python形式,n
在这种情况下,唯一的用途是对返回值的大小设置上限。
有哪些原因Python的类似文件的方式回报 少 比n
字节?
我将以这种方式重写您的代码:
with open(filename,'rb') as f:
while True:
s=f.read(max_size)
if not s: break
# process the data in s...
def blocks(infile, bufsize=1024):
while True:
try:
data=infile.read(bufsize)
if data:
yield data
else:
break
except IOError as (errno, strerror):
print "I/O error({0}): {1}".format(errno, strerror)
break
f=open('somefile','rb')
for block in blocks(f,2**16):
# process a block that Could be up to 65,536 bytes long