Hallo,
ich habe ein Text Datei:
[GRID *453 823.392883300781108.500007629395
* 0.
GRID *454 838.928588867188108.500007629395
* 0.
GRID *455 854.464294433594108.500007629395
* 0.
GRID *456 870. 108.500007629395
* 0.
DMIG* KAAX 231 2
* 173 1-6.628461386E+04
* 173 2-1.025054272E+05
* 174 1-2.728484105E-12
* 174 2-1.916495397E+05
* 175 1 6.628461386E+04
* 175 2-1.025054226E+05
* 230 1 1.818989404E-12
* 230 2 7.470106498E+04
* 230 6-2.024253482E+02
* 231 1-2.910383046E-11
* 231 2 6.439187720E+05
DMIG* KAAX 231 3
* 173 3 2.098778344E+03
* 173 4 8.045980606E+03
* 173 5-8.238491053E+03
* 174 3-3.414240650E+04
* 174 4-2.481645565E+05
* 174 5-1.026505590E-02
* 175 3 2.098777152E+03
* 175 4 8.045980602E+03
* 175 5 8.238480788E+03
* 230 3-3.390544390E+04
* 230 4 2.066723795E-02
* 230 5 2.472436368E+05
* 231 3 1.277006144E+05
DMIG* MUG1T 9598 0
* 1600 4 1.000000000E+00
DMIG* MUG1T 9599 0
* 1600 5 1.000000000E+00
DMIG* MUG1T 9600 0
* 1600 6 1.000000000E+00
DMIG* MUG1T 9601 0
* 1601 1 1.000000000E+00
DMIG* MUG1T 9602 0]
welche ich in eine Matrix umformen muss. Mich interessieren nur die Einträge von DMIG* KAAX , die restlichen habe ich bereits mit dem Code:
Datei = Datei.split()
def loeschen_vor_KAAX(file): #löscht alles vor KAAX
index = Datei.index('KAAX')
del Datei [ : index]
return Datei
loeschen_vor_KAAX(Datei)
def loeschen_nach_KAAX(file): #abhängig von MUG1T in diesem Fall
index = Datei.index('MUG1T')
del Datei[index -1 : ]
return Datei
loeschen_nach_KAAX(Datei)
#Findet alle KAAX Einträge
indexes = [i for i, j in enumerate(Datei) if j == 'KAAX']
print(indexes)
print(Datei)
gelöscht. Jetzt besitze ich eine Liste mit vielen strings. Ich würde gerne die Strings so trennen, dass die Einträge eines KAAX eintrages zusammen gehören. Also die Einträge von indexes[0] bis indexes[1]-1 und die Einträge von indexes[1] bis zum Ende zusammen gefasst werden. Hierfür fehlt mir das nötige wissen. Mit welchen Funktionen bzw. mit welchem Code kann ich diese Strings zusammen fassen?
Hilfe beim Zusammenfassen von Strings
- __blackjack__
- User
- Beiträge: 14067
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@NoraVi: Mit ``Datei = Datei.split()`` hast Du Dir im Grunde schon Struktur kaputt gemacht, an der man sich eigentlich orientieren sollte/will. Weil damit die Zeilenstruktur weg ist.
Es ist auch nicht so wirklich gut einen Namen im gleichen Namensraum an eine Zeichenkette und dann an eine Liste mit Zeichenketten zu binden, weil das verwirrend sein kann.
`Datei` stimmt auch als Name nicht, denn das ist kein Dateiobjekt, wo man so Methoden wie `read()` oder `write()` und `close()` erwarten würde.
Die Funktionen sollten nichts zurück geben. Der Code verwendet den Rückgabewert ja auch nirgends.
Übliches vorgehen wäre hier die Datei zeilenweise zu verarbeiten. Dabei in Blöcke aufteilen, und die Blöcke die einen nicht interessieren raus filtern. Die Module `itertools` und/oder `more_itertools` enthalten ein paar nützliche Werkzeuge.
Edit: Noch ein Grund der gegen `split()` spricht ist, dass die Werte nicht durch Leerraum getrennt sind, sondern an festen Zeichenpositionen anfangen und manche Werte in einer Spalte so lang sind, dass es keinen Leerraum zwischen dem Wert in der nächsten Spalte gibt.
Es ist auch nicht so wirklich gut einen Namen im gleichen Namensraum an eine Zeichenkette und dann an eine Liste mit Zeichenketten zu binden, weil das verwirrend sein kann.
`Datei` stimmt auch als Name nicht, denn das ist kein Dateiobjekt, wo man so Methoden wie `read()` oder `write()` und `close()` erwarten würde.
Die Funktionen sollten nichts zurück geben. Der Code verwendet den Rückgabewert ja auch nirgends.
Übliches vorgehen wäre hier die Datei zeilenweise zu verarbeiten. Dabei in Blöcke aufteilen, und die Blöcke die einen nicht interessieren raus filtern. Die Module `itertools` und/oder `more_itertools` enthalten ein paar nützliche Werkzeuge.
Edit: Noch ein Grund der gegen `split()` spricht ist, dass die Werte nicht durch Leerraum getrennt sind, sondern an festen Zeichenpositionen anfangen und manche Werte in einer Spalte so lang sind, dass es keinen Leerraum zwischen dem Wert in der nächsten Spalte gibt.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
@NoraVi: Die Datei ist spaltenorientiert. Jede Zeile besteht aus einem "Header" von 8 Zeichen und einer unterschiedlichen Anzahl an Parametern von jeweils 16 Zeichen.
Jeder Header ist entweder ein Keyword "GRID*", "DMIG*", ... oder das Fortsetzungszeichen "*".
Die erste Aufgabe ist es also, einen allgemeinen Parser zu schreiben, der jede Zeile in die 8 bzw. 16-Zeichenblöcke aufspaltet und Fortsetzungszeilen zusammenfasst.
Die Ausgabe dieser Funktion ist dann eine Liste, wo jeder Eintrag wiederum eine Liste mit Keyword und Parametern ist.
Wenn Du das hast, kannst Du einfach nach Keywörtern filtern und entsprechend des Keywords die Parameter verarbeiten.
Jeder Header ist entweder ein Keyword "GRID*", "DMIG*", ... oder das Fortsetzungszeichen "*".
Die erste Aufgabe ist es also, einen allgemeinen Parser zu schreiben, der jede Zeile in die 8 bzw. 16-Zeichenblöcke aufspaltet und Fortsetzungszeilen zusammenfasst.
Die Ausgabe dieser Funktion ist dann eine Liste, wo jeder Eintrag wiederum eine Liste mit Keyword und Parametern ist.
Wenn Du das hast, kannst Du einfach nach Keywörtern filtern und entsprechend des Keywords die Parameter verarbeiten.