Python: 为什么peek(1)返回8K字节而不是1字节?
我在用Python 3,发现缓冲文件输入输出中的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 个回答
12
来自Python文档的内容:
peek([size])
从流中返回字节,但不会移动读取位置。为了满足这个调用,最多只会对原始流进行一次读取。返回的字节数可能会少于或多于请求的数量。
强调是我的。
因为在peek
中,文件指针并不会移动,所以即使peek
读取的字节数超过你想要的,也没关系。你只需要在调用peek
之后取一个子串就可以了:next_byte = f.peek(1)[:1]