Импорт содержимого бинарного файла в json

Этот код позволяет импортировать данные из одного бинарного файла в файл json. В бинарном файле есть информация, которая поделена на блоки и подблоки, мне необходимо вытащить эти блоки в файл json, но возникла проблема с одним подблоком, у которого часто меняется длина символов.

1 блок из бинарника:

f3330100fffffffffbffffff07000000416c6765726961ff07000000416c6765726961ff03000000414c4703000000414c47000000002a1eff7fff7f8d1e0000ff7f01008d1eff7fff7f8d1e8d1eff7f8d1eff7fff7f8d1e0100ff7f8d1eff7fff7fff7f8d1eff7f8d1eff7fff7fff000000ff7f000000000000ff7f0000ff7f000000000100ff7f00000000ff7fff7f0000000000000000ff7f0100ff7f00000000ff7fff7f0000000000000000ff7f0100ff7f00000000ff7fff7f0000000000000000ff7f00ffffffffffffffff00ffffffff00ffffffff0008000000ffffffffffffff0000da16801900001efd0000d3260000ffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01000000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00

Первые 4 байта - количество символов всего файла. Далее 4 байта - ff ff ff ff (просто пропускаем) Далее 4 байта - это первый подблок,это то, что записывается в club['id'], там 4 значений идентификатор. Далее 4 байта - это длина символов предстоящей строки с названием клуба. После этого собственно и идёт название клуба, а затем снова 4 байта предстоящего названия, и таких названий будет 4. Далее идёт идентификатор страны из двух символов, а после следом идёт идентификатор второй страны.

И вот затем идёт подблок, который нужно просто выписать в club['unk'] как идентификатор, но проблема в том, что длина этого подблока меняется нелогическим образом. Сначала эта длина составляет 327 байтов, но после около 50 подблоков длина будет составлять 397,и так далее. Можно конечно через if elif прописывать разную длину подблока, зная где он будет меняться и как. Я сначала так и пытался сделать, но спустя 20 вариаций понял, что это не вариант, поскольку в бинарном файле всего около 70 000 блоков, и как минимум 5 тыс этот подблок будет менять свою длину.

После этого меняющегося свой размер подблока всё идёт по кругу - club['id'] , потом названия name1 и так далее.

Задача: длина подблока club['unk'] часто меняется, как можно предусмотреть это в скрипте?

Желательно сразу с кодом.

Также есть файл json, в котором есть полный список name1, name2, name3 и name4, если делать по им поиск, можно понять конечную позицию "unk"? Как это реализовать?

import json

def readInt(file, size=4):
    """Returns a 32 bit integer from the file"""
    return int.from_bytes(file.read(size), "little")

def readStr(file):
    """Returns a string from the file"""
    size = readInt(file)
    return file.read(size).decode("UTF-8")

with open("club.dat", 'rb') as datFile:
    datFile.read(8)
    clubs = []
    size = readInt(datFile)
    trace = True
    for i in range(size):
        print("#", i + 1, "/", size)
        club = {}
        datFile.read(4)
        club['id'] = readInt(datFile, 4)
        club['name1'] = readStr(datFile)
        datFile.read(1)
        club['name2'] = readStr(datFile)
        datFile.read(1)
        club['name3'] = readStr(datFile)
        club['name4'] = readStr(datFile)
        club['nation1'] = readInt(datFile, 2)
        club['nation2'] = readInt(datFile, 2)
        club['unk'] = readInt(datFile, 327)
        clubs.append(club)

with open("clubs.json", 'wt') as jsonFile:
    json.dump(clubs, jsonFile, ensure_ascii=False, indent=2)

Результат первого блока:

"id": 4294967291,
    "name1": "Algeria",
    "name2": "Algeria",
    "name3": "ALG",
    "name4": "ALG",
    "nation1": 0,
    "nation2": 0,
    "unk": тут 327 символов этого подблока
```

Ответы (0 шт):