栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

您没有考虑蛇皮… Python不是C。

首先,回顾一下:

  • st = f.read()读取EOF,或者如果以二进制形式打开,则读取到最后一个字节;
  • st = f.read(n) 尝试 读取
    n
    字节,并且在任何情况下均不超过
    n
    字节;
  • st = f.readline()一次读取一行,该行以’ n’或EOF结尾;
  • st = f.readlines()使用readline()读取文件中的所有行,并返回这些行的列表。

如果文件读取方法位于EOF处,则返回

''
。其他类型的“ file
like”方法(如StringIO,socket.makefile等)也使用了相同类型的EOF测试。最肯定的是,返回小于
n
字节的
f.read(n)
内容不是EOF的决定性测试!尽管该代码可以工作99.99%时间,是无法工作的时间,这将使您非常沮丧。再加上,它是不良的Python形式,
n
在这种情况下,唯一的用途是对返回值的大小设置上限。

有哪些原因Python的类似文件的方式回报

n
字节?

  1. EOF无疑是一个常见原因;
  2. 网络套接字可能会在读取时超时,但保持打开状态;
  3. 确切的
    n
    字节可能会导致逻辑多字节字符(例如,
    rn
    在文本模式下,我认为是Unipre中的多字节字符)或某些您不知道的底层数据结构之间的中断。
  4. 该文件处于非阻止模式,并且另一个进程开始访问该文件;
  5. 暂时无法访问该文件;
  6. 文件,磁盘,网络等上的潜在错误条件,可能是暂时的。
  7. 该程序接收到一个信号,但是信号处理程序忽略了它。

我将以这种方式重写您的代码:

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) breakf=open('somefile','rb')for block in blocks(f,2**16):    # process a block that COULD be up to 65,536 bytes long


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/660969.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号