Чтобы удалить 4 байта, вам нужно скопировать оставшийся файл вперед на 4 байта, что может быть грязно, поскольку вы читаете и записываете буферы в одном и том же файле. Проще написать новый файл и переименовать. В этом случае вы просто ищете вперед 4 байта по мере необходимости.
import os
import struct
with open("esears36_short.dat", "rb") as f, open("esars32_short.dat.tmp", 'wb') as f_out:
data = f.read(2)
number = struct.unpack(">h", data)[0]
f.seek(2, 1)
while True:
buf = f.read(number)
if not buf:
break
f_out.write(buf)
f.seek(4, 1) # 4 bytes forward
os.remove("esears36_short.dat")
os.rename("esars32_short.dat.tmp", "esears36_short.dat")
Несмотря на то, что вы пишете новый файл, вы делаете меньше фактического копирования.