【问题标题】:Python: why does peek(1) return 8K bytes instead of 1 byte?Python:为什么 peek(1) 返回 8K 字节而不是 1 字节?
【发布时间】:2014-09-24 02:37:43
【问题描述】:

我使用的是 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() 的工作原理?

【问题讨论】:

标签: python file-io peek


【解决方案1】:

来自Python docs

窥视([大小])

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

强调我的。

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

【讨论】:

  • 如果没有返回字节,那不应该是f.peek(1)[:1]吗?
  • 非常感谢!我现在知道了。我不得不承认,我在 Python 文档中不止一次阅读过这句话,但我从未完全理解过“或更多”这三个词。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-15
  • 2023-03-28
  • 2014-05-28
  • 1970-01-01
相关资源
最近更新 更多