我在 python 中有一种情况,我需要从一个 NUL 分隔的流中循环项目,该流以类似于输出的格式给出find /somewhere -print0
- 流是二进制的,项目可以包含除 NUL 之外的所有字节
- 没有办法知道整个东西是否适合可用内存(假设流可以是无限的)。
- 没有办法知道单个项目的长度(假设它总是比
READ_SIZE
我在下面的当前解决方案中更长)。
我觉得我在这里遗漏了一些东西,比如fd.readlines()
但是对于 \0 而不是 \n)
这是我目前用来解决这个问题的方法:
READ_SIZE = 2**14
def readitems(fd):
buffer = b''
last = fd.read(READ_SIZE)
while(last):
x = last.split(b'\0')
for i in range(len(x)-1):
yield buffer + x[i]
buffer = b''
buffer += x[-1]
last = fd.read(READ_SIZE)
如果确实没有我缺少的内置方法来执行此操作,那么欢迎所有更快和/或更清洁的解决方案。