Geordnete Textdatei erstellen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
mmk62
User
Beiträge: 10
Registriert: Freitag 23. September 2022, 13:09

Hallo zusammen,

ich hab einen Code erstellt, welcher Daten von einer Maschine einliest, und diese als Textdatei wiedergeben soll. Die Daten sind dabei Bewegungen in x, y und z Richtung. Jedoch werden die Daten durch meinen Code ungeordnet ausgeben.Der Code sieht folgendermaßen aus:

import paho.mqtt.client as mqtt

MQTT_Broker = 'technologiekette.wzl.senseering.net'

def on_connect(client, userdata, flags, rc):
print('Connected with result code ' + str(rc))
client.subscribe('verzahnen/hart/#')


def on_message(client, userdata, msg):
print(msg.topic + " " + str(msg.payload))
print('=================================')
print('=================================')
with open('test_ViperData.txt','a+') as f:
f.write(msg.topic + " " + str(msg.payload) + "\n")

client = mqtt.Client()
client.on_message = on_message
client.on_connect = on_connect

client.connect(MQTT_Broker, 1883, 60)
client.loop_forever()

Und die Ausgabe des Codes hat folgende Struktur:

verzahnen/hart/data b'{"yPosAct":182.510311,"zPosAct":138.663987}'
verzahnen/hart/data b'{"yPosAct":182.504959,"zPosAct":138.66684}'
verzahnen/hart/data b'{"yPosAct":182.499586,"zPosAct":138.669706}'

Ich würde gerne eine Textdatei ausgeben bekommen, die alle Werte in Tabellenform in x, y und z Richtung der Reihe nach geordnet ausgibt. Wie kann ich dies am besten realisieren? Viele Dank schon mal im Voraus.


Viele Grüße
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich verstehe nicht, welche Reihenfolge da gefragt ist. Nach was sollen die Daten sortiert werden? Und deine Daten sehen wie JSON aus, um das zu verarbeiten benutzt man das json-Modul.
mmk62
User
Beiträge: 10
Registriert: Freitag 23. September 2022, 13:09

Hi _deets_
vielen Dank für deine Rückmeldung. Also die Zahlenwerte sollen tabellarisch nach Größe geordnet werden. Also in der Form:
yPosAct. zPosAct
179. 180
180. 181
…. …..

Viele Grüße
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Größe gibt es bei Koordinaten nicht wirklich. Ist München größer als Köln? So richtig sinnvoll ist das also nicht, warum glaubst du also das bringt etwas?

Aber wenn’s denn sein muss: wenn du die Daten mit dem JSON Modul einliest, kannst du mit dem keys argument der sorted Funktion dieses Kriterium darstellen.

Code: Alles auswählen

sortiert = sorted(daten, key=lambda eintrag: (eintrag["yPosAct"], eintrag["zPosAct"]))
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@mmk62: "a+" ist hier kein sinnvoller Dateimodus. "+" ist bei Textdateien eigentlich immer falsch. Und man sollte bei Textdateien immer explizit eine Kodierung angeben. Und wenn es nur ASCII ist.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Benutzeravatar
Dennis89
User
Beiträge: 1124
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,

@__blackjack__ was kann denn passieren wenn man „+“ bei Textdateien verwendet?
Wenn ich den Text in der Doku lese, könnte ich mir vorstellen dass da Teile abgeschnitten werden können? Aber vielleicht war das auch etwas zu direkt übersetzt.

Danke und Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Da 'a+' schreiben nur ans Ende erlaubt, ist das nicht ganz so gefährlich.
Wenn man wahlfreien Zugriff auf Textdateien hat, muß man ja per seek an bestimme Stellen springen, wobei man Zeichen liest und schreibt, die Positionen aber trotzdem in Bytes sind.
Da man nie weiß, wie viele Bytes eine Zeichenkette hat, ist es schwierig, die richtige Position anzusteuern. Wenn man mitten in einer Datei schreibt, dann kann der überschriebene Text entweder zu kurz oder zu lang in Bytes sein, was dann zu kaputtem Inhalt führen kann.

Auch bei Binärdateien wird man in den meisten Fällen entweder lesen oder schreiben wollen. Für exotische Fälle (z.B. Datenbanken) kann es manchmal Sinn machen, sowohl zu schreiben als auch zu lesen, an beliebigen Stellen. ab+, wo man nur ans Ende schreiben kann, ist dann wohl noch exotischer.
mmk62
User
Beiträge: 10
Registriert: Freitag 23. September 2022, 13:09

Hallo zusammen,

erstmal vielen Dank für all die Vorschläge. Da ich noch ein blutiger Anfänger bin wüsste ich nicht genau, wie genau und an welchen Stellen ich den Code ergänzen bzw. verbessern muss, um das gewünschte Resultat zu bekommen. Hat vielleicht jemand von euch eine Idee ?

Viele Grüße
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Dir sind doch konkrete Dinge gesagt worden, wie zb das JSON-Modul zu benutzen. Hast du das probiert? Wie sieht der Versuch aus? Verstehst du was JSON ist?
Benutzeravatar
Dennis89
User
Beiträge: 1124
Registriert: Freitag 11. Dezember 2020, 15:13

Danke @Sirius3 für die Erklärung.
Sorry @mmk62 das ich dein Thread dafür missbraucht habe, ich bin schon wieder weg.

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
mmk62
User
Beiträge: 10
Registriert: Freitag 23. September 2022, 13:09

Hallo zusammen,

erstmal vieln Dank für die zahlreichen Antworten und Verzeihung für die späte Rückmeldung.
@_deets_ meinst du mit dem JSON-Modul die folgende Form, um ein JSON String zu Python-Code zu konvertieren : json.loads(json_string) ?
Da ich noch Anfänger bin, verstehe ich JSON nur grob.

_blackjack_ meinst du mit Dekodierung folgendes:

def on_message(client, userdata, msg):
topic = msg.topic
m_decode = str(msg.payload.decode())
print (m_decode)

@Dennis89 kein Problem =)
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@mmk62: Ich meinte das `encoding`-Argument beim öffnen von Dateien. Das sollte man bei Textdateien immer explizit angeben. Sonst wird da implizit ein plattform- und einstellungsabhängiger Wert genommen, der nicht mit der tatsächlichen Kodierung der Datei übereinstimmen muss.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
mmk62
User
Beiträge: 10
Registriert: Freitag 23. September 2022, 13:09

@_blackjack_ Alles klar. Danke dir.
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

mmk62 hat geschrieben: Donnerstag 29. September 2022, 10:55 @_deets_ meinst du mit dem JSON-Modul die folgende Form, um ein JSON String zu Python-Code zu konvertieren : json.loads(json_string) ?
Du musst mir die gegebene Antwort von Sirius3 nicht nochmal zur Bestaetigung vorlegen...

Es ist recht offensichtlich, das du *nichts* verstehst von dem, was deine Aufgabe von dir fordert. Ohne wenigstens ein Grundverstaendnis von Python und Programmierung (was sind Typen, wie wandelt man einen in einen anderen) wird's nix. Du wirst erstmal in Grundlagen investieren muessen. Mit Code-Fragment-Pingpong an die Forumsmitglieder hier wird es nichts.
Antworten