从文件末尾寻找抛出不受支持的异常

我有这个代码片段,我正在尝试使用 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
我在这里错过了什么吗?

已邀请:
来自Python 3.2 及更高版本的文档:

在文本文件中(那些b在模式字符串中没有打开的文件),只允许相对于文件开头的搜索(例外是搜索到以 结尾的文件seek(0, 2))。

这是因为文本文件在编码的字节和它们所代表的字符之间没有一一对应的关系,所以seek无法告诉在文件中跳转到哪里移动一定数量的字符。

如果您的程序可以处理原始字节,则可以将程序更改为:

f = open('D:\SGStat.txt', 'ab')
f.seek(-3, 2)
请注意b模式字符串中的 ,对于二进制文件。(还要注意删除了冗余f.seek(0, 2)调用。)

但是,您应该意识到b在读取或写入文本时添加标志可能会产生意想不到的后果(例如多字节编码),并且实际上会更改读取或写入的数据类型。

要回复问题请先登录注册