← retour aux snippets

struct.iter_unpack: lire un flux binaire par blocs

Itérer sur des enregistrements binaires sans tout charger.

python binary #struct#binary

objectif

Itérer sur des enregistrements binaires sans tout charger.

code minimal

import struct
data = struct.pack("<Ih", 123, -5) + struct.pack("<Ih", 7, 2)
recs = list(struct.iter_unpack("<Ih", data))
print(recs[0][0] == 123 and recs[1][1] == 2)  # attendu: True

utilisation

import struct, io
buf = io.BytesIO(struct.pack(">H", 0x1234) * 3)
vals = [x[0] for x in struct.iter_unpack(">H", buf.getvalue())]
print(vals == [0x1234, 0x1234, 0x1234])

variante(s) utile(s)

import struct
print(struct.calcsize("<Ih") > 0)

notes

  • iter_unpack lit paresseusement des tuples selon le format.
  • Assurez-vous que la taille du buffer est un multiple du format.