2

我在 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)

如果确实没有我缺少的内置方法来执行此操作,那么欢迎所有更快和/或更清洁的解决方案。

4

0 回答 0