gpt4 book ai didi

python - 为什么只能从文本文件的开头到 `seek`?

转载 作者:行者123 更新时间:2023-11-28 16:55:41 27 4
gpt4 key购买 nike

python documentation说:

In text files (those opened without a b in the mode string), only seeks relative to the beginning of the file are allowed (the exception being seeking to the very file end with seek(0, 2)).

事实上,这失败了:

with open(filename, 'rt') as f:
f.seek(2, os.SEEK_SET)
f.seek(2, os.SEEK_CUR)

Traceback (most recent call last):
File "<stdin>", line 3, in <module>
io.UnsupportedOperation: can't do nonzero cur-relative seeks

问题

我可以轻松地将每个 f.seek(offset, os.SEEK_CUR) 替换为 f.seek(f.tell() + offset, os.SEEK_SET),那么,为什么 Python 不自己做呢?

这个有效:

with open(filename, 'rt') as f:
f.seek(2, os.SEEK_SET)
f.seek(f.tell() + 2, os.SEEK_SET)

我错过了什么吗?这有时会失败吗?我应该注意什么?

我可以想象在多字节 UTF-8 序列的中间寻找问题,但我看不到从 SEEK_SETSEEK_CUR 寻找有何不同

最佳答案

我怀疑 f.seek(f.tell() + 2, os.SEEK_SET) 是允许的,因为实现无法将其与 f.seek(f.tell() , os.SEEK_SET)。来自documentation for seek :

SEEK_SET or 0: seek from the start of the stream (the default); offset must either be a number returned by TextIOBase.tell(), or zero. Any other offset value produces undefined behaviour.

因为 f.tell() + 2 不是 f.tell() 返回的值,所以这是未定义的行为,因为你不应该知道f.tell() 的返回值代表什么,所以加 2 没有意义。

想法是,唯一允许的搜索是您从之前调用 f.tell() 时保存的绝对位置,而不是任意计算的位置。

关于python - 为什么只能从文本文件的开头到 `seek`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58571406/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com