我有这个代码片段,我正在尝试使用 python 从文件末尾向后查找:
f=open('D:\SGStat.txt','a');
f.seek(0,2)
f.seek(-3,2)
这会在运行时抛出以下异常:
f.seek(-3,2)
io.UnsupportedOperation: can't do nonzero end-relative seeks
我在这里错过了什么吗?
原文由 seriousgeek 发布,翻译遵循 CC BY-SA 4.0 许可协议
从 Python 3.2 及更高版本的 文档 中:
这是因为文本文件在编码后的字节和它们所代表的字符之间没有一一对应关系,所以
seek
无法判断要跳转到文件中的哪个位置移动一定数量人物。如果您的程序可以处理原始字节,您可以将程序更改为:
请注意模式字符串中的
b
对于二进制文件。 (另请注意删除了多余的f.seek(0, 2)
调用。)但是,您应该知道,在读取或写入文本时添加
b
标志可能会产生意想不到的后果(例如使用多字节编码),并且实际上 会更改读取或写入的数据类型。