Es geht letztendlich um die Ansteuerung eines Displays. Das Display bietet die Möglichkeit an 8 Symbole anzulegen. Ein Symbol besteht aus einem 8x5 bitmap.
Das ist die Doku dazu
Nun ist ein Python-Code, in dem erst mal 8 Smybole mit diesem Umfang niedergeschrieben werden, ziemlich doof zu lesen und die Scrollerei nervt.
Deswegen und weil es in dem Projekt noch weitere Einstellmöglichkeiten gibt, wurde eine toml-Datei angelegt.
Wenn ich jetzt zum Beispiel ein Symbole erstellen will, dann übergebe ich diese Tuple:
Code: Alles auswählen
(0b00100,0b01010,0b01010,0b01010,0b01010,0b10001,0b11111,0b01110)
Die toml-Datei hat dann diesen Inhalt:
Code: Alles auswählen
[Symbole]
thermometer = '0b00100,0b01010,0b01010,0b01010,0b01010,0b10001,0b11111,0b01110'
Code: Alles auswählen
print(type(0b00100))
<class 'int'>
Wenn ich jetzt die toml-Datei auslese, erhalte ich einen String, diesen in Binär umgewandelt gibt mir aber zu wenig Zeichen aus.
Code: Alles auswählen
print(bin(int('0b00100', 2)))
0b100
Die Methode, die ich kenne um die Nullen aufzufüllen, liefert aber wieder einen String:
Code: Alles auswählen
print(format(int('0b00100', 2), '#08b'))
0b000100
print(type(format(int('0b00100', 2), '#08b')))
<class 'str'>
Das ist mal wieder nicht mein Projekt und ich habe das Display auch nicht um es testen zu können.
Mit 'binascii' habe ich das so gelöst:
Code: Alles auswählen
#!/usr/bin/python3
import toml
import binascii
config_conf = """
[Symbole]
thermometer = '0b00100,0b01010,0b01010,0b01010,0b01010,0b10001,0b11111,0b01110'
"""
config = toml.loads(config_conf)
test = tuple(
binascii.a2b_qp(config["Symbole"]["thermometer"].split(",")[index])
for index in range(len(config["Symbole"]["thermometer"].split(",")))
)
print(test)
print(type(test[0]))
Vielen Dank und Grüße
Dennis