8

我正在使用 Python 3,缓冲文件 I/O 的 peek() 方法似乎不像记录的那样工作。例如,下面的代码说明了这个问题——它打印8192作为返回的字节字符串的长度f.peek(1)

jpg_file = 'DRM_1851.JPG'
with open(jpg_file, 'rb') as f:
    next_byte = f.peek(1)
    print(len(next_byte))

我有时想在不移动文件指针的情况下查看下一个字节,但由于上述方法不起作用,我在这些地方做一些事情:

next_byte = f.read(1) # read a byte
f.seek(-1,1) # move the file pointer back one byte

这行得通,但感觉就像一个杂物。我是否误解了 peek() 的工作原理?

4

1 回答 1

10

来自Python 文档

窥视([大小])

从流中返回字节而不推进位置。最多对原始流进行一次读取以满足调用。返回的字节数可能少于或多于请求。

强调我的。

由于文件指针没有移入,因此读取的数量是否超过您想要的数量peek并不重要。peek偷看后只需取一个子字符串:next_byte = f.peek(1)[:1]

于 2014-08-01T00:16:29.930 回答