Как сохранить стороку данных нулей и единиц в бинарной кодировке 1 символ = 1 bit?
Подскажите, есть ли какая-нибудь простая возможность битовую строку длиной примерно 2^17 < n < 2^23, сохранить в файл с кодировкой на один символ 1 bit?
Допустим, выполнив код:
with open('data/bin_file.bin', 'wb') as bin_file:
str = ''
for i in range(1024):
str += '1'
bin_file.write(str.encode())
то на выходе получим файл bin_file.bin, но при этом, в нем всё также будет выделено на один символ 1 байт. Как я понял это особенность самого менеджера файлов с ключем b, что он записывает всё как байтстроку (или питона в целом?)? Как это обойти?
И, в общем, в связи с этим и вопрос, как сохранить, и затем считать, бинарные данные в файл так, чтобы кодировалось 1 символ = 1 bit?
Нужно это всё для экономии места, т.к. таких файлов ещё около n.
В интернетах пишут что можно считывать по 8 бит и конвертировать в символ utf-8, после уже записывать, и в обратном порядке соответственно декодировать, но такой вариант не для меня, т.к. много работы с исходными битовыми данными, и постоянно кодировать/декодировать миллионы значений в миллионах файлов чтобы что-то вытащить/сравнить и т.д. просто неудобно, плюс в данном случае нагружается уже проц, что тоже не сильно хорошо.
Или я что-то делаю не так?