72 lines
2.2 KiB
Python
72 lines
2.2 KiB
Python
import re
|
|
from datetime import datetime
|
|
|
|
"""
|
|
Teilaufgabe 1:
|
|
> Zerlegen Sie zeilenweise die Datei syslog in die folgenden Bestandteile:
|
|
- Datum
|
|
- Uhrzeit
|
|
- Rechnername
|
|
- Prozessname
|
|
- Numerische Prozess-ID (ist nicht in allen Zeilen vorhanden)
|
|
- Nachricht
|
|
> Wandeln Sie dabei Datum und Uhrzeit in ein datetime-Objekt um. Nehmen Sie das aktuelle Jahr für die Bildung des Objekts.
|
|
> Die Ausgabe ist eine Liste mit einem dict pro Zeile aus der Quelldatei.
|
|
Teilaufgabe 2:
|
|
> Laden Sie die Datei heidi.md.
|
|
> Ersetzen Sie den Namen Heidi unter Verwendung des re-Moduls mit einem anderen Mädchennamen. https://de.statista.com/statistik/daten/studie/286369/umfrage/beliebteste-vornamen-fuer-maedchen-in-der-deutschen-schweiz/ liefert Ihnen eine Auswahl.
|
|
> Speichern Sie den geänderten Text mit dem Dateinamen ab, den Sie ausgewählt haben. Vergessen Sie dabei nicht auf die Dateiendung .md.
|
|
"""
|
|
|
|
|
|
def aufgabe_1():
|
|
with open("part-3/regex/syslog.txt", "r", encoding="utf-8") as f:
|
|
log = f.read()
|
|
|
|
pattern = (
|
|
r"^(?P<date>\w{3}\s+\d{1,2})\s"
|
|
r"(?P<time>\d{2}:\d{2}:\d{2})\s"
|
|
r"(?P<computer>[\w.-]+)\s"
|
|
r"(?P<process>[\w.-]+)"
|
|
r"(?:\[(?P<process_id>\d+)\])?:\s"
|
|
r"(?P<message>.*)$"
|
|
)
|
|
|
|
items: list[dict] = []
|
|
for match in re.finditer(pattern, log, re.MULTILINE):
|
|
m = match.groupdict()
|
|
dt_str = f"{m['date']} {datetime.now().year} {m['time']}"
|
|
dt = datetime.strptime(dt_str, "%b %d %Y %H:%M:%S")
|
|
|
|
items.append(
|
|
{
|
|
"timestamp": dt,
|
|
"computer": m["computer"],
|
|
"process": m["process"],
|
|
"process_id": m["process_id"],
|
|
"message": m["message"].strip(),
|
|
}
|
|
)
|
|
|
|
return items
|
|
|
|
|
|
def aufgabe_2():
|
|
with open("part-3/regex/heidi.md", "r", encoding="utf-8") as f:
|
|
text = f.read()
|
|
|
|
pattern = r"\bHeidi"
|
|
new_name = "Mia"
|
|
text = re.sub(pattern, new_name, text)
|
|
|
|
output_filename = f"part-3/regex/{new_name.lower()}.md"
|
|
with open(output_filename, "w", encoding="utf-8") as f:
|
|
f.write(text)
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
print(aufgabe_1())
|
|
# aufgabe_2()
|