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

Python file.tell提供错误的值位置

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

Python file.tell提供错误的值位置

在文档中(相当模糊)解释了文件对象

next()
方法的原因:

当文件用作迭代器时,通常在for循环中(例如,对于f中的行:打印行),将重复调用next()方法。此方法返回下一个输入行,或者在命中EOF时引发StopIteration。为了使for循环成为遍历文件行的最有效方法(一种非常常见的操作),next()方法使用隐藏的预读缓冲区。使用预读缓冲区的结果是,将next()与其他文件方法(如readline())组合在一起无法正常工作。但是,使用seek()将文件重新定位到绝对位置将刷新预读缓冲区。

返回的值

tell()
反映了此隐藏的预读缓冲区已到达的距离,通常比程序实际检索到的字符超出几千个字节。

对此没有任何可移植的方法。如果需要

tell()
与阅读线混合使用,请改用文件的
readline()
方法。为了获得可用的
tell()
结果,要进行权衡是,使用遍历大文件
readline()
通常比使用慢得多
forline in file_object:

具体来说,将循环更改为此:

line = self.fh.readline()while line:    if p.search(line):        self.porSnipStartFPtr = self.fh.tell()        sys.stdout.write("found regPorSnip")    line = fh.readline()

不过,我不确定那不是您真正 想要的 是:

tell()
正在捕获 下一 行的开始位置。如果要在行的 开始 位置,则需要更改逻辑,如下所示:

pos = self.fh.tell()line = self.fh.readline()while line:    if p.search(line):        self.porSnipStartFPtr = pos        sys.stdout.write("found regPorSnip")    pos = self.fh.tell()    line = fh.readline()

或用“半圈”进行:

while True:    pos = self.fh.tell()    line = self.fh.readline()    if not line:        break    if p.search(line):        self.porSnipStartFPtr = pos        sys.stdout.write("found regPorSnip")


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

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

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