Gesehen
NEW
Programmierung
Anthropic
Claude Haiku 4.5
VS
OpenAI
GPT-5.2
Erweiterter Logdatei-Parser für ein benutzerdefiniertes Format
Schreiben Sie eine Python-Funktion `parse_log(log_content: str) -> list`, die eine Logdatei mit einem benutzerdefinierten Format parst. Die Funktion soll den Loginhalt als einen einzigen mehrzeiligen String entgegennehmen und eine Liste von Dictionaries zurückgeben, wobei jedes Dictionary eine erfolgreich abgeschlossene Transaktion darstellt.
**Regeln für das Log-Format:**
1. **`START <transaction_id> <timestamp>`**: Markiert den Beginn einer Transaktion. `transaction_id` ist ein String ohne Leerzeichen. `timestamp` ist ein ISO-8601-formatiertes String.
2. **`END <transaction_id> <status> <timestamp>`**: Markiert das Ende einer Transaktion. Die `transaction_id` muss mit einer offenen Transaktion übereinstimmen. `status` ist ein einzelnes Wort (z. B. `SUCCESS`, `FAIL`).
3. **`EVENT <key1>=<value1> <key2>="<value with spaces>" ...`**: Stellt ein Ereignis innerhalb der aktuell aktiven Transaktion dar. Es besteht aus einem oder mehreren Schlüssel-Wert-Paaren. Werte, die Leerzeichen enthalten, müssen in doppelte Anführungszeichen eingeschlossen sein.
4. **`COMMENT # <any text>`**: Eine Kommentarzeile, die ignoriert werden soll.
**Verarbeitungslogik:**
* Die Funktion soll Zeilen nacheinander verarbeiten.
* Eine `EVENT`-Zeile gehört zur zuletzt gestarteten Transaktion, die noch nicht beendet wurde.
* Eine Transaktion gilt nur dann als abgeschlossen und gültig, wenn sie eine passende `START`- und `END`-Zeile mit derselben `transaction_id` hat.
* Die Ausgabe soll eine Liste von Dictionaries sein. Jedes Dictionary repräsentiert eine abgeschlossene Transaktion und muss folgende Schlüssel haben:
* `transaction_id` (string)
* `start_time` (string)
* `end_time` (string)
* `status` (string)
* `events` (eine Liste von Dictionaries, wobei jedes innere Dictionary die Schlüssel-Wert-Paare einer `EVENT`-Zeile repräsentiert).
**Fehlerbehandlung und Randfälle:**
* Ignorieren Sie alle `COMMENT`-Zeilen, Leerzeilen oder Zeilen, die fehlerhaft sind und nicht den angegebenen Formaten entsprechen.
* Ignorieren Sie jedes `EVENT`, das außerhalb einer aktiven Transaktion auftritt (d. h. vor dem ersten `START` oder nachdem eine Transaktion geschlossen wurde).
* Wenn eine neue `START`-Zeile erscheint, bevor die vorherige Transaktion mit einem `END` geschlossen wurde, gilt die vorherige Transaktion als "abandoned" (verlassen) und sollte verworfen werden. Die neue `START`-Zeile beginnt eine neue Transaktion.
* Jede Transaktion, die am Ende der Logdatei noch offen ist, gilt ebenfalls als "abandoned" und sollte nicht in die endgültige Ausgabe aufgenommen werden.