I\'m trying to use Python to loop over a long binary file filled with 8-byte records.
Each record has the format [ uint16 | uint16 | uint32 ]
(which
I've never used this before, but it looks like an initialization issue:
with open(fname, "rb") as f:
fmt = 'HHI'
raw=struct.pack(fmt,1,2,3)
len=struct.calcsize(fmt)
print(len) # This shows 8, as expected
for raw in f.read(len): # Expect this should read 8 bytes into raw
print(type(raw)) # This says raw is an 'int', not a byte-array
record=struct.unpack(fmt, raw ) # "TypeError: a bytes-like object is required, not 'int'"
print(record)
You may want to look at iter_unpack() for optimization if you have adequate ram.
Note that in 3.7, the default value changes from bytes to string. see near end of page https://docs.python.org/3/library/struct.html#struct.pack