Hallo,
Ich bin Tom und neu hier im Forum ,
ich habe mich mal an Python getraut, weil ich dachte, dass es einfach aussieht...
Naja das dachte ich jedoch komme ich direkt bei meinem ersten Projekt nicht weiter.
Ich habe einen Arduino Programmiert, welcher sensor daten in eine .txt Datei auf eine Micro Sd Karte schreibt.
Die unterschiedlichen daten sind durch bestimmte Zeichen abgetrennt.
Beispiel:
28.05.2019:sonnig | 28 | Sensor OK
…
Das dann für die ganzen Tage
nun wollte ich mit Python einen Script schreiben, mit dem ich die Daten in eine neue Textdatei schreiben kann mit anderem Aufbau.
Beispiel:
Am 28.05.2019 war es sonnig mit einer Temperatur von 28 Grad Celsius.
Ich weiß das ist eventuell nicht das beste erste Projekt aber ich würde das gerne schaffen.
Nun mein Problem es gibt denke ich keine Methode mit der man bis zu einem bestimmten zeichen lesen kann.
ich habe nur gefunden dass man bestimmte zeilen lesen kann also vermute ich man muss erst vor jedem zeichen eine neue zeile machen dazu habe ich String split gefunden. aber irgendwie komme ich damit auch nicht klar ich hab mir schon einige YouTube Videos zur Datenverarbeitung angesehen aber hab nichts passendes gefunden.
ich bin nicht faul und wäre über ein paar tipps was ich mir duchlesen soll oder so echt dankbar.
Danke schon mal im vorraus
Tom
Neuling versucht Textdateien zu lesen und zu schreiben
-
- User
- Beiträge: 379
- Registriert: Mittwoch 27. Juni 2018, 17:39
Die Befehle ".readlines()" und "split()" brauchst du.28.05.2019:sonnig | 28 | Sensor OK
"readlines()" um alle Zeilen der Datei auszulesen, wobei du jede Zeile mit einem Array aufrufst (Zeile 1 = array[0])
"split()" um den text zu teilen und so dein Beispielsatz zu bilden. So, wie die Funktion jetzt geschrieben ist, teilt es alles durch das Leerzeichen. Also z.b: "Mc Doof" - somit ist der 0. array des Strings "Mc" und der 2. "Doof".
Wenn es möglich ist, dass bei dem Datum statt " : " ein " | " ist, dann kannst als Funktionsargument "|" verwenden (muss als String als Agrument übergegeben werden).
Und zu der Methode, um bis bestimmte Zeichen zu lesen: doch, gibt es.
Dafür kannst du ".readline()[anfangsspalte :] [endspalte]" verwenden. Ist aber quatsch, außerdem liest damit nur 1 Zeile.
Vllt geht ja auch ".readlines()[0][anfangsspalte:] [endspalte]" - somit liest Zeile 1 (Index 0) aus und die Daten. Allerdings müsstest du für die jeweiligen Daten unterschiedliche Variablen verwenden. Also dieses Bsp. bezog sich nur für Zeile 1 und für 1 Information in dieser Zeile (z.b. Datum).
@xXSkyWalkerXx1: readlines bzw readline wird eigentlich nie gebraucht, weil File-Objekte Iteratoren sind, der übliche Aufruf, wenn man eine Datei zeilenweise verarbeiten will, ist:
hier also
Mit `readlines()` liest Du alle Zeilen, ein `readlines()[0]` liest alle Zeilen und schmeißt sie bis auf die erste weg.
Ein `zeile[anfangsspalte :] [endspalte]` sind ein Slice-Zugriff `zeile[anfangsspalte:]`, der die ersten Zeichen wegläßt, und vom Rest wird dann das Zeichen an der Stelle endspalte genommen, wobei sich der Index nun auf die Stellen ab `anfangsspalte` bezieht. Du meinstest wahrscheinlich `zeile[anfangsspalte:endspalte]`.
Da aber `regnerisch` und `sonnig` in der Anzahl der Zeichen unterscheidet, hilft bei diesem Problem eine fixe Spaltennummer sowieso nichts.
@Eus4: Du willst eigentlich immer ganze Zeilen lesen, denn dies enthalten die Information die Du brauchst. Die spätere Verarbeitung per `split` liefert Dir dann die Teile, die Du brauchst.
Was hast Du denn mit `split` versucht und wo gab es damit konkret ein Problem?
Code: Alles auswählen
with open(filename) as lines:
for line in lines:
tu_was_mit_der_Zeile(line)
Code: Alles auswählen
datum_und_wetter, temperatur, ok = line.split('|')
datum, wetter = datum_und_wetter.split(':')
Ein `zeile[anfangsspalte :] [endspalte]` sind ein Slice-Zugriff `zeile[anfangsspalte:]`, der die ersten Zeichen wegläßt, und vom Rest wird dann das Zeichen an der Stelle endspalte genommen, wobei sich der Index nun auf die Stellen ab `anfangsspalte` bezieht. Du meinstest wahrscheinlich `zeile[anfangsspalte:endspalte]`.
Da aber `regnerisch` und `sonnig` in der Anzahl der Zeichen unterscheidet, hilft bei diesem Problem eine fixe Spaltennummer sowieso nichts.
@Eus4: Du willst eigentlich immer ganze Zeilen lesen, denn dies enthalten die Information die Du brauchst. Die spätere Verarbeitung per `split` liefert Dir dann die Teile, die Du brauchst.
Was hast Du denn mit `split` versucht und wo gab es damit konkret ein Problem?
-
- User
- Beiträge: 379
- Registriert: Mittwoch 27. Juni 2018, 17:39
Stimmt, mit der for-Schleife geht's auch noch und ist eigentlich besser. ^^
Zu "readlines()[0]" - das war ja auch nur ein Beispiel, um zum Beispiel die erste Zeile zu lesen. Ja, ist umständlicher, hatte halt garnicht mehr an die for-Schleife gedacht.
Und zu dem Splice: Oh, ja, meinte ich - ja. Hatte Mal im Buch darüber was gelesen und sonst nie verwendet, dachte man schreibt das so, wie ich es erst schrieb. Brauch sowas halt nie. ^^
Eben, deswegen schrieb ich ja, dass das mit readline() und dem Splicing quatsch ist.
Zu "readlines()[0]" - das war ja auch nur ein Beispiel, um zum Beispiel die erste Zeile zu lesen. Ja, ist umständlicher, hatte halt garnicht mehr an die for-Schleife gedacht.
Und zu dem Splice: Oh, ja, meinte ich - ja. Hatte Mal im Buch darüber was gelesen und sonst nie verwendet, dachte man schreibt das so, wie ich es erst schrieb. Brauch sowas halt nie. ^^
Eben, deswegen schrieb ich ja, dass das mit readline() und dem Splicing quatsch ist.