Python - Verwendung Regulärer Ausdrücke


B

Beginner1

Hallo zusammen!

Ich hoffe jemanden zu finden, der mir bei einem "kleinen" Problem behilflich sein kann. Ich beziehe mich jetzt auf die Bilder 1 und 2 meines angehängten PDFs.

1:
Im ersten Bild sieht man einen Auszug aus einer Textdatei. Hier möchte ich mit Hilfe von regulären Ausdrücken jeweils zu den "time steps" in der Zeile mit "nodal point" den Wert unter "x-disp" auslesen und in ein Array ablegen. Da ich komplett neu im Bereich Programmierung bin, habe ich zurzeit keine Idee wie ich das Ganze umsetzen kann. Hat jemand einen verständlichen Vorschlag?

2:

In diesem Textfile suche ich immer nach dem Stichwort "xtotal" und möchte den dazu gehörigen Wert auslesen und ebenfalls in einen Array speichern.

Ich würde mich echt freuen, wenn jemand möglichst einfach erklären (aufschreiben) könnte wie man das Ganze mit Python programmieren könnte :(
 

Anhänge

  • BSP_1_2.pdf
    50,4 KB · Aufrufe: 82

OnlyFoo

Erfahrenes Mitglied
kA ob ich dich richtig verstanden hab. Hier mal ein anstaz für das erste:
Python:
xdisp = []
line = fp.readline()
while line:
    if "x-disp" in line:
        next = line.fp.readline()
        xdisp.append(re.split(r'\s+')[1])
        
    line = fp.readline()

Und für das zweite dürfte sowas helfen:
Python:
print re.findall(r'xtotal=\s([0-9E+.-]+)')
 
M

MAK

Hallo, ich habe ein Problem.
Ich möchte eine CSV File nach " (Anführungszeichen) durchsuchen und zählen, ob sie in gerader oder ungerader anzahl auftreten nach jedem ; (Semiklon).
Das problem ist, das ich durch re.match()/re.search/re.findall() es nicht hinbekomme, das das Script vor und nach einem String diese Anführungszeichen suchen soll.

Hier habe ich Testbeispiel ohne Reguläre Ausdrüche:

def find():
trenner = [' " ']
f = open(r"C:/test.csv", "r")
if trenner in f:
print "Gefunden"
else:
print "Schade"
f.close()

find()
 

Raubkopierer

Erfahrenes Mitglied
Python:
import re
regex = r';("*)' # der regex, der beliebig viele Anführungszeichen hinter einem Semikolon matcht. Dabei packen wir die Anführungszeichen in eine Gruppe um einfach auf sie zugreifen zu können im match
grade,ungrade = [],[] # Liste in die wir die Gruppen der Leerzeichen packen, einfache Integer, die wir erhöhen würden auch gehen doch falls man mit den Leerzeichen noch was anderen machen will
fd = open("your_file","r")
string = fd.read()
matches = re.findall(regex,string) # gibt eine Liste von match-Objekten zurück über die wir iterieren können
for match in matches:
    if len(match.group(1))%2 == 0: # länge der Leerzeichen (Gruppe 1, Gruppe 0 ist der ganze gematchte String also mit Semikolon) und modulus (%; Restdivision) um zu sehen ob grade oder ungrade Anzahl
        grade.append(match.group(1)) # entsprechendes append oder erhöhen der Zähler
    else:
        ungrade.append(match.group(1))
print "es wurden",len(grade),"Anführungszeichen gerader Anzahl und",len(ungrade),"ungrader Anzahl gefunden." # Ausgabe ;)