String aus toml zu einer tuple mit bitmap wandeln
Verfasst: Freitag 22. April 2022, 22:13
Guten Abend und schon wieder benötige ich etwas Unterstützung.
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:
Also das Ziel ist es, den String aus der toml-Datei in dieses Format/Datentyp zu wandeln.
Die toml-Datei hat dann diesen Inhalt:
Da habe ich erst mal eventuell ein Verständnisproblem mit den Datentypen. In der Doku steht 'bitmap' , aber:
und das 'b' sagt mir ja, das es sich um eine Binärzahl handelt.
Wenn ich jetzt die toml-Datei auslese, erhalte ich einen String, diesen in Binär umgewandelt gibt mir aber zu wenig Zeichen aus.
Die Zahl ist die gleiche, aber das Display erwartet hier 5 Zeichen und bekommt nur 3.
Die Methode, die ich kenne um die Nullen aufzufüllen, liefert aber wieder einen String:
Also erst mal, ist 'bitmap' ein Datentyp, den ich verwenden muss? Wenn ich danach google komme ich auf das Modul 'binascii'. Dadurch erhalte ich aber Byte-Objekte.
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:
Kann mir jemand sagen, ob dass der richtige Weg war und ich die Byte-Objekte so übergeben kann oder suche ich hier wirkich was ganz anderes?
Vielen Dank und Grüße
Dennis
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