我需要循环直到遇到类似文件的对象的末尾,但我没有找到“明显的方法”,这让我怀疑我忽略了一些东西,嗯,很明显。:-)
我有一个流(在这种情况下,它是一个 StringIO 对象,但我对一般情况也很好奇),它以“<length><data>”格式存储未知数量的记录,例如:
data = StringIO("\x07\x00\x00\x00foobar\x00\x04\x00\x00\x00baz\x00")
现在,我能想象到的唯一清晰的阅读方式是使用(我认为的)一个初始化循环,这似乎有点不像 Pythonic:
len_name = data.read(4)
while len_name != "":
len_name = struct.unpack("<I", len_name)[0]
names.append(data.read(len_name))
len_name = data.read(4)
在类似 C 的语言中,我只需将 's test 子句read(4)
放在while
's test 子句中,但这当然不适用于 Python。关于更好的方法来实现这一点的任何想法?