Bestimmte Zeilen einer textdatei lesen

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
Ymaoh
User
Beiträge: 10
Registriert: Samstag 29. Juli 2017, 09:20

Hallo!

Ich stehe vor folgendem Problem: Ich habe Text(.dat) Dateien, die eine Reihe von Daten enthalten. Diese Daten sehen in etwa so aus:

#timestamp counter frequency [Hz] energy [J]
1505923164.480557 1603 +0.0e+00 +7.2396e-03
1505923164.581423 1604 +1.0e+01 +9.9698e-03
1505923164.682232 1605 +1.0e+01 +7.0931e-03

Die Files sind einige tausend Zeilen lang. Allerdings sind zwischen verwertbaren Daten auch solche, die ich nicht brauche. Daher möchte ich nur Zeilen zwischen bestimmten Zeitstempel einlesen, über diese mitteln und das ganze als Wert zu einer Liste hinzufügen. Also beispielsweise:

Alle "Energy" Werte zwischen Zeitstempeln 1505923164 und 1505923165 einlesen, den Durchschnitt bilden, als erstes Objekt zur Liste L hinzufügen.
Dann alle Werte zwischen Zeitstempeln 1505923168 und 15059231649, mitteln und als zweiten Eintrag zur Liste hinzufügen.

Ich finde zwar im Internet einiges, wie man bestimmte Reihen nach ihrer Nummer einlesen kann, aber finde nichts, und habe auch selbst keine Idee, wie ich bestimmte Zeilen nach ihrem ersten Eintrag einlesen kann....und bei einem mehrere tausend Zeilen langen File und 100 "Bereichen", die ich einlesen möchte, würde das händisch extrem lange dauern.

Hat jemand hier vielleicht einen Tip? Gibt es eine Funktion die sowas kann?

lieben Dank schonmal
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

Lies die Datei komplett ein und filtere die eingelesenen Arrays. Ein paar tausend Zeilen geht in Sekundenbruchteilen, erst ab ein paar Millionen Zeilen lohnt sich sowas zu optimieren. Das Einlesen würde ich mit numpy.loadtxt oder mit panda machen. Das Filtern oder Suchen würde ich mit Numpy machen.
a fool with a tool is still a fool, www.magben.de, YouTube
Ymaoh
User
Beiträge: 10
Registriert: Samstag 29. Juli 2017, 09:20

Ja, ich nutze numpy zum einlesen.
Allerdings weiß ich da leider auch nicht, wie ich sagen kann, dass nur bestimmte Zeilen nach Eintrag verarbeitet werden sollen. :K
Ymaoh
User
Beiträge: 10
Registriert: Samstag 29. Juli 2017, 09:20

Ah, ich glaube ich hab einen Weg gefunden.
Ich probiers mal aus, und stells dann ein : )
Ymaoh
User
Beiträge: 10
Registriert: Samstag 29. Juli 2017, 09:20

Darauf bin ich auch gestoßen, @__deets__, aber ich verstehe das Beispiel nicht wirklich. Die Bedingung scheint dort zu sein: durch 3 teilbar. Aber ich verstehe die Syntax nicht. (Ich bin blutiger Anfänger, aber das ist sicher leicht zu merken :oops: ).
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Na du musst natürlich deine Bedingung formulieren. Also deine beiden Zeiträume prüfen.

Code: Alles auswählen

x = np.random.randn(20, 3)
( x > .7) & (x < .8)| (x > .2) & (x < .3)
Antworten