Hallo zusammen!
Ich habe folgendes als Auszug zu einem Textfile:
KraftX= -1.56789E+00 KraftY=.....
Jetzt würde ich gerne mit Hilfe von regulären Ausdrücken meine Textdatei nach "KraftX=" absuchen und die dahinter stehenden Werte einlesen und zunächst in einem String-Array abspeichern. Da ich nicht aus dem Bereich der Programmierung komme :K , ist es mir zurzeit schleierhaft wie ich vorgehen kann, so dass es mit möglichst wenig Aufwand funktioniert. Ach ja...ich sehe gerade, dass die Leerzeichen vor dem negativen Vorzeichen nicht angezeigt werden...es befinden sich also noch 2 Leerzeichen vor dem "Minus" bei KraftX...
Hat jemand von euch einen Lösungsvorschlag?
Reguläre Ausdrücke mit Python
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Ich würde das hier vorschlagen:
Code: Alles auswählen
In [29]: import re
In [30]: expr = "KraftX= -1.56789E+00 KraftY=....."
In [31]: re.search(r"(?<=KraftX=) *(-?\d\.\d*E\+\d*)", expr).group()
Out[31]: ' -1.56789E+00'
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Update (um das / die Spaces vor dem String sofort wegzubekommen):
Code: Alles auswählen
In [34]: re.search(r"(?<=KraftX=) *(?P<value>-?\d\.\d*E\+\d*)", expr).group("value")
Out[34]: '-1.56789E+00'
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Hi USER!
Vielen Dank für deine Rückmeldung. Ich hab mich allerdings nicht ganz so gut ausgedrückt: der dargestellte Text war nur ein kleiner Auszug um zu zeigen worum es geht und was ich will. Es liegt eine Textdatei vor in der sich ca. 1000 Mal die Bezeichnung "KraftX=" befindet....und ich möchte die gesamte Datei absuchen und jeweils die Kraftwerte hinter "KraftX=" einlesen...und anschließend in einen String-Array zusammenfassen, der dann schließlich in ein Numpy-Array umgewandelt werden soll.
Hast du hierfür noch einen Vorschlag...also die Vorgehensweise für eine komplette Textdatei?
Gruß
Wolf2010
Vielen Dank für deine Rückmeldung. Ich hab mich allerdings nicht ganz so gut ausgedrückt: der dargestellte Text war nur ein kleiner Auszug um zu zeigen worum es geht und was ich will. Es liegt eine Textdatei vor in der sich ca. 1000 Mal die Bezeichnung "KraftX=" befindet....und ich möchte die gesamte Datei absuchen und jeweils die Kraftwerte hinter "KraftX=" einlesen...und anschließend in einen String-Array zusammenfassen, der dann schließlich in ein Numpy-Array umgewandelt werden soll.
Hast du hierfür noch einen Vorschlag...also die Vorgehensweise für eine komplette Textdatei?
Gruß
Wolf2010
@Wolf2010: Lies doch mal die Dokumentation zum `re`-Modul. Es gibt nicht nur `search()`.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Wie wäre es mit ein wenig Eigeninitiative! Guck doch mal in die Doku zum re-Modul... da findest Du einige interessante Funktionen, die alleine vom Namen her ziemlich deutlich für Dich interessant sein sollten.
Ich würde da ja eine iterative Funktion nutzen und das Umwandeln direkt vornehmen, ohne erst alle Ausdrücke in einer Liste zu sammeln.
Ich würde da ja eine iterative Funktion nutzen und das Umwandeln direkt vornehmen, ohne erst alle Ausdrücke in einer Liste zu sammeln.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Ganz ehrlich Leute...inwiefern ich mich mit der umfangreichen Dokumentation beschäftigen kann ist mir klar. Ich hatte gehofft hier jemanden fragen zu können, der sofort die passende Information für mich hat...sonst brauche ich ehrlich gesagt keine Hilfe in einem Forum suchen. Da ich sehr viel anderes zutun habe, wollte ich mir den Weg über die Dokumentation sparen...weil ich kurz das Werkzeug brauche das Problem zu lösen...aber gut...für den ersten Tipp habe ich mich bedankt...das Bestreben mancher Leute ihr Wissen zu teilen scheint nicht ganz so ausgeprägt zu sein...
Du kennst den Spruch mit dem Fisch und dem Fischen lernen? Hier sind alle einfach sehr bemüht, dir das Fischen beizubringen.
Aber wenn dir dies hier reicht, auch gut:
Stefan
Aber wenn dir dies hier reicht, auch gut:
Code: Alles auswählen
import re
s = "KraftX= -1.56789E+00 KraftY=....."; s += s; s += s
print(re.findall(r"KraftX=\s*([-+]?\d+\.\d+E[-+]\d+)", s))
@Wolf2010: Ganz ehrlich: Das `re`-Modul enthält gerade mal 11 Funktionen. Da kurz drüber zu schauen was die grob machen ist IMHO nicht zuviel verlangt. Zumal wir den Namen der Funktion ja schon kannten und ziemlich klar sein sollte das `findall()` ein ziemlich naheliegernder Name ist, wenn man etwas sucht was alle Vorkommen findet.
Wenn Du hier Informationen haben möchtest, die Du auch *einfach* selbst hättest finden können, dann brauchst Du keine Hilfe, sondern jemanden der Dir die Doku vorliest.
Wenn Du hier Informationen haben möchtest, die Du auch *einfach* selbst hättest finden können, dann brauchst Du keine Hilfe, sondern jemanden der Dir die Doku vorliest.
- framp
- User
- Beiträge: 52
- Registriert: Samstag 9. Oktober 2010, 22:16
- Wohnort: bei Stuttgart
- Kontaktdaten:
Bin auch noch neu hier im Forum. Bei meinem ersten Posting habe ich auch keine direkte Lösung erhalten sondern Hinweise wo ich nachlesen kann. So bin ich es auch aus anderen Foren gewohnt und praktiziere es dort auch so. Du musst bedenken, dass Du diese Hinweise kostenlos bekommst. Es gibt sicherlich auch eine Beratungsfirma oder Hotline zu Python: Die wird aber Euronen von Dir sehen wollenWolf2010 hat geschrieben:Ganz ehrlich Leute...inwiefern ich mich mit der umfangreichen Dokumentation beschäftigen kann ist mir klar. Ich hatte gehofft hier jemanden fragen zu können, der sofort die passende Information für mich hat...sonst brauche ich ehrlich gesagt keine Hilfe in einem Forum suchen.
Wieso? Sie haben Dir doch die entsprehenden Pointer gegeben. Das ist immer das schwierigste zu Anfang den Einstieg zu finden. Danach kommt man i.d.R. selbst weiter durch Lesen. Und wenn es dann wieder stockt kann man seine Fragen präzisieren und sich so iterativ der Lösung nähern...das Bestreben mancher Leute ihr Wissen zu teilen scheint nicht ganz so ausgeprägt zu sein...