Seite 1 von 1

Leere Zeilen in der Konsole

Verfasst: Freitag 30. August 2019, 13:00
von __Jana__
Hallo!
Ich hätte gerne, dass in der Konsole nur Zeilen ausgegeben werden, die nicht leer sind.
So sieht es beispielsweise momentan aus:
USB connection COM4








Measured (ADC1): 0.66637 V


So hätte ich es gerne:
USB connection COM4
Measured : 1 V



Zur Funktion mit der Ausgabe "USB connection COM4":

def getCOM():
comlist = serial.tools.list_ports.comports()
for element in comlist:
if ("USB Serial Port" in element.description):
com = str(element.device)
print('USB connection', com)
return com

Ich bekomme aber beim Aufruf vieler Funktionen diese Leerstellen.


Jegliche Tipps werden dankbar angenommen :)

Re: Leere Zeilen in der Konsole

Verfasst: Freitag 30. August 2019, 13:27
von Jankie
Wenn die Anzahl der Whitelines variiert:

Code: Alles auswählen

import os
test_string = """USB connection COM4








Measured (ADC1): 0.66637 V"""
    
    
string_without_empty_lines = os.linesep.join([x for x in test_string.splitlines() if x])
print(string_without_empty_lines)

Wenn die Anzahl der Whitelines feststeht:

Code: Alles auswählen

test_string = """USB connection COM4








Measured (ADC1): 0.66637 V"""


string_without_empty_lines = test_string.replace(9*'\n','\n')
print(string_without_empty_lines)

Sonstige Anmerkungen:

In Python werden Funktionennamen klein_mit_unterstrich geschrieben, wäre dann bei dir also get_com():

comlist ist auch kein guter Variablenname, da Datentypen nichts im Namen zu suchen haben. (Ich weiß, habe ich in dem obigen beispiel auch gemacht, dient aber nur zur Veranschaulichung.)

bei der Bedingung vom If brauchst du keine Klammern.

bei deinem print würde ich den String mit String-Formatierung zusammenstückeln, einfach mal suchmaschinen.

Beim nächsten Mal, wenn du Code postest, benutz bitte den Code-Tag, sonst geht die Einrückung verloren. Dafür einfach im vollständigen Editor auf das </> Symbol klicken.

Re: Leere Zeilen in der Konsole

Verfasst: Freitag 30. August 2019, 13:42
von Sirius3
@__Jana__: wahrscheinlich bekommst Du diese Leerzeilen, weil tatsächlich Leerzeilen über die serielle Schnittstelle gesendet werden. Wenn Du das nicht willst, mußt Du die Leerzeilen ausfiltern. Dazu wäre es im übrigen gut, wenn Du den Code zeigst, der die Leerzeilen ausgibt, und nicht irgendeine andere Funktion, die Dir gerade einfällt.

Wenn Du ein bestimmtes USB-Gerät suchst, ist es besser, Du testest auf hwid oder product, etc. statt auf description. element.device ist schon ein String.

Code: Alles auswählen

def get_com_device():
    ports = serial.tools.list_ports.comports()
    for port in ports:
        if "USB Serial Port" in port.description:
            print('USB connection', port.device)
            return port.device

Re: Leere Zeilen in der Konsole

Verfasst: Freitag 30. August 2019, 14:32
von __Jana__
@Sirius3
Genau das wird es sein, über die serielle Schnittstelle werden noch mehr Daten geschickt, die ich aber nicht anzeigen lassen möchte.
Der Code ist leider echt groß und nicht einfach in ein Minimalbeispiel komprimierbar.

Wie filtert man die Leerzeichen von der seriellen Schnittstelle? Habe bisher online leider nichts gefunden.

Danke!!

Re: Leere Zeilen in der Konsole

Verfasst: Freitag 30. August 2019, 14:52
von Sirius3
Das macht man genau gleich, wie bei jedem anderen String-Vergleich auch. Woher die Zeilen kommen, ist ja Python egal.

Re: Leere Zeilen in der Konsole

Verfasst: Freitag 30. August 2019, 14:53
von __deets__
So wie auch aus jeder anderen Quelle: per string.strip.

Alternativ kannst du auch beim print auf das implizite newline verzichten, wenn du Ausgaben der seriellen Daten machst. mit

Code: Alles auswählen

print(zeile, end="")