gpt4 book ai didi

python - 读取二进制文件: does Python have an unget() equivalent?

转载 作者:行者123 更新时间:2023-11-30 22:29:15 27 4
gpt4 key购买 nike

我正在二进制文件中寻找一个 2 字节序列,该序列太大而无法放入内存。我不能一次简单地读取 2 个字节,因为,例如

xx xx x1 2x xx

同样,我不能简单地查找第一个,然后查看第二个是否存在,因为

xx112xx

我真的很希望能够做这样的事情:

with open("myfile", "rb") as f:
byte = f.read(1)
while byte:
if byte == b'1':
if f.read(1) == b'2':
# success case
else:
# put back the latest byte somehow
byte = f.read(1)

是否有一些功能可以完成此前瞻工作,而无需自己完成所需的所有簿记详细信息?

最佳答案

io.BufferedReader() object有一个peek() method :

Return bytes from the stream without advancing the position. At most one single read on the raw stream is done to satisfy the call. The number of bytes returned may be less or more than requested.

每当您以二进制模式打开文件进行读取时,您都会得到这样一个对象,因此您可以直接在代码中使用它:

with open("myfile", "rb") as f:
for byte in iter(lambda: f.read(1), b''):
if byte == b'1':
if f.peek(1) == b'2':
# success case

考虑到我们查看的字节仍然“在流中”,下一个 f.read() 调用将包含它。如果您不希望这样做,则必须发出显式 f.read(1)

我用 iter() 2-argument call 替换了你的 while 循环在 for 循环中一次读取文件 1 个字节。

关于python - 读取二进制文件: does Python have an unget() equivalent?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46427017/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com