ファイルのようなオブジェクトの最後に達するまでループする必要がありますが、「それを行う明白な方法」が見つからないため、何かを見落としているのではないかと疑っています。:-)
"<length><data>" 形式で不明な数のレコードを格納するストリーム (この場合は StringIO オブジェクトですが、一般的なケースにも興味があります) があります。
data = StringIO("\x07\x00\x00\x00foobar\x00\x04\x00\x00\x00baz\x00")
さて、これを読むために想像できる唯一の明確な方法は、初期化されたループを使用することです (私はそう思います)。これは少しPythonらしくないようです:
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 に似た言語でread(4)
は、while
's test 句に を挿入するだけですが、もちろん Python では機能しません。これを達成するためのより良い方法について何か考えはありますか?