С генерацией строки формата худо-бедно справился (может и не совсем правильно, но сейчас суть не в этом), a дальше что? Как вставить строку в pack? В примерах каждый элемент вставяляется по отдельности, например pack(fmt,1, 2, 3, 4, 5...)
import struct
my_str = '1 20 Пакуем байты на Python 2024 6.5' s = my_str.split(' ') r = [] for i in s: if i.isalpha(): for k in i: r += k r += 'c' else: r += [i] for i in range(len(r)): if not r[i].isalpha(): if not '.' in r[i]: r[i] = 'i' else: r[i] = 'f' else: r[i] = 'c' res = ''.join(r) fmt = '' n = 1 for i in range(len(res) - 1): if res[i] == res[i + 1]: n +=1 if res[i] != res[i + 1] or i == len(res) - 1: fmt += str(n) + res[i] n = 1 if res[-2] != res[-1]: fmt += res[-1] fmt = '=' + ''.join(list(filter(lambda x: not x == '1',fmt))) print(fmt) # '1 2 Пакуем байты на Python 2024 6.5' # формат =2i23cif # Не знаю нужно ли учитывать пробел перед "Пакуем", с ним будет 24с
packed_str = struct.pack(fmt, b'my_str') # Вот тут что? Как вставить строку? print(packed_str)
Выдает packed_str = struct.pack(fmt, b'my_str') struct.error: pack expected 27 items for packing (got 1) Внятных разъяснений не нашел...
packed_str = struct.pack(fmt, b'my_str')
struct.error: pack expected 27 items for packing (got 1)
Внятных разъяснений не нашел...