Как превратить последовательность нулей и единиц в байты Python, Micropython

в продолжение этого вопроса. исходная задача: вывести на OLED экран через микроконтроллер изображение в формате .pbm изображение бывает двух форматов P1 и P4.

если выполнить такой код

with open('arrows.pbm', 'rb') as f:
    print(f.read())

мы получим, примерно, такие результаты:

b'P4\n# Created by GIMP version 2.10.20 PNM plug-in\n7 7\n\x108|\xfe888'

или

b'P1\n# Created by GIMP version 2.10.20 PNM plug-in\n7 7\n0001000001110001111101111111001110000111000011100

обычно предлагается читать построково и требовать P4. но этажыж ниинтересна

def read_pbm_img (path, img_name):
        with open(path+img_name) as f:
        
        # превращаем файл в список из строк
        data_list = f.readlines()
        
        # третьей строкой всегда идут ширина и высота изображения. запоминаем
        [width, hight] = (data_list[2].split())
        # проверяем принадлежность к синим или зеленым
        if  data_list[0] == "P4\n":
           
            data = bytearray(data_list[3])
            return framebuf.FrameBuffer(data, int(width), int(hight), framebuf.MONO_HLSB)

        elif:

            data_list[0] == "P1\n":
            # склеиваем оставшиеся строки в одну, попутно, убирая перенос каретки
            body = ''
            body += body.join(data_list[3:]).replace('\n', '')
            
            return framebuf.FrameBuffer(body, int(width), int(hight), framebuf.MONO_HLSB)
        else: 
            print('первая строчка ваще не от этого файла,try except и всё такое')
        

легко догадаться что второй вариант выдает на экране дичь. вот как перфокарту конвертировать обратно в байты. попытки прикрутить bit_lenth и to_bytes, мягко говоря, успехом не увенчались


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