@Smasch: Anmerkungen zum Quelltext:
Auf Modulebene sollte nur Code stehen der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst.
`time` wird importiert aber gar nicht verwendet.
Das Semikolon trennt in Python Anweisungen innerhalb einer Zeile. Das gehört also nicht ans Ende einer Zeile. Das geht zwar weil es auch die leere Anweisung gibt, aber es macht keinen Sinn.
Für Baudrate und `timeout` verwendest Du die Default-Werte, also braucht man die nicht angeben.
``port.isOpen()`` macht keinen Sinn → Weg damit.
`Serial`-Objekte sind iterierbar, und zwar genau wie bei Dateien iteriert man über die Zeilen. Also würde man statt der ``while``-Schleife eine ``for``-Schleife verwenden. Genau wie Dateiobjekte sind `Serial`-Objekte auch „context manager“, können also mit der ``with``-Anweisung verwendet werden.
Das '+' im Dateimodus ist nicht nötig und sollte auch nicht verwendet werden. Das macht selten Sinn, und wenn dann sowieso nur bei Binärdateien.
Zwischen Funktionsname und öffnender Klammer für den Aufruf gehört kein Leerzeichen.
Ich lande dann als Zwichenergebnis ungefähr hier:
Code: Alles auswählen
from serial import Serial
def main():
with Serial('/dev/tty.usbserial-FTHEUS5P') as port:
for daten in port:
with open('spam.txt', 'a', encoding='utf-8') as out_file:
out_file.write(daten.decode('utf-8'))
print(daten)
print(len(daten))
print(daten[:5])
if __name__ == '__main__':
main()
Zur Frage: Schau Dir mal in der Python-Dokumentation an was man mit Zeichenketten und `bytes` so alles machen kann.
Ansonsten wäre eine bessere Beschreibung der Daten und des gewünschten Ergebnisses sinnvoll. Es ist anscheinend nicht ganz klar ob das was Du gezeigt hast die Eingabe oder die gewünschte Ausgabe sein soll.