Nur bestimmte Daten auslesen.

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
Levin
User
Beiträge: 2
Registriert: Sonntag 20. Dezember 2020, 14:08

Hallo liebe Community,

ich bin ziemlich unerfahren mit python und mit programmieren allgemein. Mein Problem ist folgendes:

Ich habe einen Datensatz, den ich auslesen und ordnen möchte, als Testprojekt, um später größere Datenmengen auszuwerten.

Die Datei hat folgende Inhalte:

./Data/Molekül/Methode_Lösemittel.log\
SCF Done: E(Methode) = -234.446074679 A.U. after 14 cycles\
SCF Done: E(Methode) = -247.848012995 A.U. after 11 cycles\
SCF Done: E(Methode) = -247.848196931 A.U. after 10 cycles\
SCF Done: E(Methode) = -247.858207531 A.U. after 9 cycles\
SCF Done: E(Methode) = -247.848207863 A.U. after 15 cycles\
SCF Done: E(Methode) = -447.848207875 A.U. after 15 cycles\
SCF Done: E(Methode) = -247.844407876 A.U. after 15 cycles\
SCF Done: E(Methode) = -247.845207877 A.U. after 15 cycles\
./Data/Molekül/Methode_Lösemittel.log\
SCF Done: E(Methode) = -249.455555555 A.U. after 12 cycles\
SCF Done: E(Methode) = -229.496754583 A.U. after 10 cycles\
SCF Done: E(Methode) = -249.466786109 A.U. after 8 cycles\
SCF Done: E(Methode) = -549.496787461 A.U. after 7 cycles\
SCF Done: E(Methode) = -449.496787569 A.U. after 7 cycles\
SCF Done: E(Methode) = -249.496787558 A.U. after 6 cycles\
SCF Done: E(Methode) = -249.496787559 A.U. after 5 cycles\
SCF Done: E(Methode) = -249.496787563 A.U. after 4 cycles\
SCF Done: E(Methode) = -249.496787565 A.U. after 4 cycles\
SCF Done: E(Methode) = -249.485678756 A.U. after 4 cycles\
SCF Done: E(Methode) = -249.496787564 A.U. after 5 cycles\
SCF Done: E(Methode) = -249.496787562 A.U. after 5 cycles\
SCF Done: E(Methode) = -249.496787562 A.U. after 3 cycles\

Jetzt möchte ich gerne in der ersten Zeile das Molekül rauslesen und dann jeweils nur den Zahlenwert der Energie (das ist die Zahl nach dem E) mit der größten Zahl vor dem Cycle.
Meine Idee wäre jetzt, dass ich versuche die zahl vor der cylce in einer variable zu speichern und dann einfach zu überprüfen, welche zahl am größten ist und diese Zeile dann ausgeben. Im Internet habe ich herausgefunden, dass man mit Regular expression die Stellen der Zahlen gut finden kann, allerdings habe ich nicht herausgefunden, wie ich den Zahlenwert dann in einer Variable speichern kann.


Vielleicht hat jemand anders ja ne andere oder bessere Idee um diese Problem zu lösen und kann mir vielleicht sagen ob es ne andere Methode als Regula Expression gibt um das herauszubekommen. Freue mich über jede Hilfe.

Vielen Dank im Voraus
Thants
User
Beiträge: 34
Registriert: Dienstag 1. Dezember 2020, 12:00

Wenn du reguläre Ausdrücke verwendest, kannst du mit runden Klammern Gruppen definieren und dir danach die Zeichen einer bestimmten Gruppe zurückgeben lassen. Der Zahlenwert der Energie könnte also eine Gruppe sein, so dass du am Ende nur die Zahl aus der Zeile extrahieren kannst.

Wenn die Datei aber immer so wie deinem Beispiel aufgebaut ist, würde ich wohl einfach die Zeilen in Worte aufteilen und dann direkt per Index auf die Einzelteile zugreifen. Beispiel:

Code: Alles auswählen

>>> line = "SCF Done: E(Methode) = -247.848012995 A.U. after 11 cycles\\"
>>> words = line.split()
>>> words
['SCF', 'Done:', 'E(Methode)', '=', '-247.848012995', 'A.U.', 'after', '11', 'cycles\\']
>>> words[4]
'-247.848012995'
>>> float(words[4])
-247.848012995
Anhand der Worte am Anfang der Zeile kannst du überprüfen, ob es sich um eine Zeile mit einer Energie oder um einen Dateinamen handelt.
Benutzeravatar
__blackjack__
User
Beiträge: 13079
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Levin: Die Frage ist IMHO nicht klar genug gestellt. *Den* „Zahlenwert […] mit der grössten Zahl vor dem Cycle“ gibt es doch gar nicht. Im ersten Block ist die Grösste Zahl vor "cycle" die 15, aber da gibt es nicht eine, sondern vier Zeilen. Welchen Zahlenwert davon willst Du denn haben?

Bei solchen Fragen ist es auch immer Hilfreich wenn Du angibst wie das Ergebnis aussehen soll. Also nicht nur in Worten sondern tatsächlich den Wert. In diesem Fall also wahrscheinlich eine Liste mit Tupeln aus Dateiname und einer Zahl, oder eine Liste mit Zahlen, die zu diesem Dateinamen gehören‽

Es ist manchmal auch sinnvoll anzugeben was in den Daten fest und was variabel ist. Ich rate jetzt mal das "Methode" und "Lösemittel" a) variabel sind und b) in den beiden Zeilen wo sie vorkommen *unterschiedliche* Werte haben‽
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Levin
User
Beiträge: 2
Registriert: Sonntag 20. Dezember 2020, 14:08

Die Idee mit dem Split ist sehr hilfreich, vielen Dank. Habe das Problem mittlerweile in den Griff bekommen. Vielen Dank für die schnellen Antworten.
Antworten