我有这个代码片段,我正在尝试使用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及更高版本的documentation中:

这是因为文本文件在编码的字节和它们表示的字符之间没有1对1的对应关系,因此seek不能告诉文件中要跳到特定位置的字符数。
如果您的程序可以处理原始字节,则可以将程序更改为:

f = open('D:\SGStat.txt', 'ab')
f.seek(-3, 2)
请注意,模式字符串中的b是二进制文件。 (另请注意,删除了多余的f.seek(0, 2)调用。)
但是,您应该注意,在阅读或编写文本时添加b标志可能会产生意想不到的后果(例如,使用多字节编码),实际上是changes the type of data read or written

关于python - 从文件末尾查找引发不支持的异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21533391/

10-12 21:37