您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Python EOF用于file.read()的多字节请求

Python EOF用于file.read()的多字节请求

您没有考虑蛇皮… 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
python 2022/1/1 18:47:12 有343人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶