Python:为什么peek(1)返回8K字节而不是1字节?

Dou*_*ugh 6 python file-io peek

我正在使用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))
Run Code Online (Sandbox Code Playgroud)

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

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

这是有效的,但感觉像一个kludge.我是否误解了peek()的工作原理?

Col*_*Two 9

Python文档:

PEEK([大小])

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

强调我的.

由于文件指针未被移入peek,因此peek读取的数量超过所需数量并不重要.偷看后只需要一个子串:next_byte = f.peek(1)[:1]

  • 如果没有返回字节,不应该是“f.peek(1)[:1]”吗? (2认同)