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

时间:2014-08-01 00:12:32

标签: 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))

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

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

这很有效,但感觉就像一块垃圾。我是否误解了peek()的工作原理?

1 个答案:

答案 0 :(得分:8)

来自Python docs

  

<强> PEEK([大小])

     

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

强调我的。

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