298 lines
11 KiB
Plaintext
298 lines
11 KiB
Plaintext
{
|
||
"cells": [
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 1,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"'\\nTeilaufgabe 1:\\n> Zerlegen Sie zeilenweise die Datei syslog in die folgenden Bestandteile:\\n- Datum\\n- Uhrzeit\\n- Rechnername\\n- Prozessname\\n- Numerische Prozess-ID (ist nicht in allen Zeilen vorhanden)\\n- Nachricht\\n> Wandeln Sie dabei Datum und Uhrzeit in ein datetime-Objekt um. Nehmen Sie das aktuelle Jahr für die Bildung des Objekts.\\n> Die Ausgabe ist eine Liste mit einem dict pro Zeile aus der Quelldatei.\\nTeilaufgabe 2:\\n> Laden Sie die Datei heidi.md.\\n> 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.\\n> Speichern Sie den geänderten Text mit dem Dateinamen ab, den Sie ausgewählt haben. Vergessen Sie dabei nicht auf die Dateiendung .md.\\n'"
|
||
]
|
||
},
|
||
"execution_count": 1,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"import re\n",
|
||
"from datetime import datetime\n",
|
||
"\n",
|
||
"\"\"\"\n",
|
||
"Teilaufgabe 1:\n",
|
||
"> Zerlegen Sie zeilenweise die Datei syslog in die folgenden Bestandteile:\n",
|
||
"- Datum\n",
|
||
"- Uhrzeit\n",
|
||
"- Rechnername\n",
|
||
"- Prozessname\n",
|
||
"- Numerische Prozess-ID (ist nicht in allen Zeilen vorhanden)\n",
|
||
"- Nachricht\n",
|
||
"> Wandeln Sie dabei Datum und Uhrzeit in ein datetime-Objekt um. Nehmen Sie das aktuelle Jahr für die Bildung des Objekts.\n",
|
||
"> Die Ausgabe ist eine Liste mit einem dict pro Zeile aus der Quelldatei.\n",
|
||
"Teilaufgabe 2:\n",
|
||
"> Laden Sie die Datei heidi.md.\n",
|
||
"> 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.\n",
|
||
"> Speichern Sie den geänderten Text mit dem Dateinamen ab, den Sie ausgewählt haben. Vergessen Sie dabei nicht auf die Dateiendung .md.\n",
|
||
"\"\"\""
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 5,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"def aufgabe_1() -> list[dict]:\n",
|
||
" with open(\"syslog.txt\", \"r\", encoding=\"utf-8\") as f:\n",
|
||
" log = f.read()\n",
|
||
"\n",
|
||
" pattern = (\n",
|
||
" r\"^(?P<date>\\w{3}\\s+\\d{1,2})\\s\"\n",
|
||
" r\"(?P<time>\\d{2}:\\d{2}:\\d{2})\\s\"\n",
|
||
" r\"(?P<computer>[\\w.-]+)\\s\"\n",
|
||
" r\"(?P<process>[\\w.-]+)\"\n",
|
||
" r\"(?:\\[(?P<process_id>\\d+)\\])?:\\s\"\n",
|
||
" r\"(?P<message>.*)$\"\n",
|
||
" )\n",
|
||
"\n",
|
||
" items: list[dict] = []\n",
|
||
" for match in re.finditer(pattern, log, re.MULTILINE):\n",
|
||
" m = match.groupdict()\n",
|
||
" dt_str = f\"{m['date']} {datetime.now().year} {m['time']}\"\n",
|
||
" dt = datetime.strptime(dt_str, \"%b %d %Y %H:%M:%S\")\n",
|
||
"\n",
|
||
" items.append(\n",
|
||
" {\n",
|
||
" \"timestamp\": dt,\n",
|
||
" \"computer\": m[\"computer\"],\n",
|
||
" \"process\": m[\"process\"],\n",
|
||
" \"process_id\": m[\"process_id\"],\n",
|
||
" \"message\": m[\"message\"].strip(),\n",
|
||
" }\n",
|
||
" )\n",
|
||
"\n",
|
||
" return items"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 21,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"def aufgabe_2():\n",
|
||
" with open(\"heidi.md\", \"r\", encoding=\"utf-8\") as f:\n",
|
||
" text = f.read()\n",
|
||
"\n",
|
||
" pattern = r\"\\bHeidi\"\n",
|
||
" new_name = \"Mia\"\n",
|
||
" text = re.sub(pattern, new_name, text)\n",
|
||
"\n",
|
||
" output_filename = f\"{new_name.lower()}.md\"\n",
|
||
" with open(output_filename, \"w\", encoding=\"utf-8\") as f:\n",
|
||
" f.write(text)\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 18,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>timestamp</th>\n",
|
||
" <th>computer</th>\n",
|
||
" <th>process</th>\n",
|
||
" <th>process_id</th>\n",
|
||
" <th>message</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>2025-04-17 06:44:53</td>\n",
|
||
" <td>bs1-lab</td>\n",
|
||
" <td>kernel</td>\n",
|
||
" <td>None</td>\n",
|
||
" <td>Linux version 5.10.0-8-amd64 (debian-kernel@li...</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>2025-04-17 06:44:53</td>\n",
|
||
" <td>bs1-lab</td>\n",
|
||
" <td>kernel</td>\n",
|
||
" <td>None</td>\n",
|
||
" <td>Command line: BOOT_IMAGE=/boot/vmlinuz-5.10.0-...</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>2025-04-17 06:44:53</td>\n",
|
||
" <td>bs1-lab</td>\n",
|
||
" <td>kernel</td>\n",
|
||
" <td>None</td>\n",
|
||
" <td>x86/fpu: Supporting XSAVE feature 0x001: 'x87 ...</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>2025-04-17 06:44:53</td>\n",
|
||
" <td>bs1-lab</td>\n",
|
||
" <td>kernel</td>\n",
|
||
" <td>None</td>\n",
|
||
" <td>x86/fpu: Supporting XSAVE feature 0x002: 'SSE ...</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>2025-04-17 06:44:53</td>\n",
|
||
" <td>bs1-lab</td>\n",
|
||
" <td>kernel</td>\n",
|
||
" <td>None</td>\n",
|
||
" <td>x86/fpu: Supporting XSAVE feature 0x004: 'AVX ...</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>...</th>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>954</th>\n",
|
||
" <td>2025-04-17 06:48:49</td>\n",
|
||
" <td>bs1-lab</td>\n",
|
||
" <td>sudo</td>\n",
|
||
" <td>779</td>\n",
|
||
" <td>tux : TTY=pts/0 ; PWD=/home/tux ; USER=root ; ...</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>955</th>\n",
|
||
" <td>2025-04-17 06:48:49</td>\n",
|
||
" <td>bs1-lab</td>\n",
|
||
" <td>sudo</td>\n",
|
||
" <td>779</td>\n",
|
||
" <td>pam_unix(sudo:session): session opened for use...</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>956</th>\n",
|
||
" <td>2025-04-17 06:48:50</td>\n",
|
||
" <td>bs1-lab</td>\n",
|
||
" <td>sudo</td>\n",
|
||
" <td>779</td>\n",
|
||
" <td>pam_unix(sudo:session): session closed for use...</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>957</th>\n",
|
||
" <td>2025-04-17 06:48:59</td>\n",
|
||
" <td>bs1-lab</td>\n",
|
||
" <td>sudo</td>\n",
|
||
" <td>783</td>\n",
|
||
" <td>tux : TTY=pts/0 ; PWD=/home/tux ; USER=root ; ...</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>958</th>\n",
|
||
" <td>2025-04-17 06:48:59</td>\n",
|
||
" <td>bs1-lab</td>\n",
|
||
" <td>sudo</td>\n",
|
||
" <td>783</td>\n",
|
||
" <td>pam_unix(sudo:session): session opened for use...</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"<p>959 rows × 5 columns</p>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" timestamp computer process process_id \\\n",
|
||
"0 2025-04-17 06:44:53 bs1-lab kernel None \n",
|
||
"1 2025-04-17 06:44:53 bs1-lab kernel None \n",
|
||
"2 2025-04-17 06:44:53 bs1-lab kernel None \n",
|
||
"3 2025-04-17 06:44:53 bs1-lab kernel None \n",
|
||
"4 2025-04-17 06:44:53 bs1-lab kernel None \n",
|
||
".. ... ... ... ... \n",
|
||
"954 2025-04-17 06:48:49 bs1-lab sudo 779 \n",
|
||
"955 2025-04-17 06:48:49 bs1-lab sudo 779 \n",
|
||
"956 2025-04-17 06:48:50 bs1-lab sudo 779 \n",
|
||
"957 2025-04-17 06:48:59 bs1-lab sudo 783 \n",
|
||
"958 2025-04-17 06:48:59 bs1-lab sudo 783 \n",
|
||
"\n",
|
||
" message \n",
|
||
"0 Linux version 5.10.0-8-amd64 (debian-kernel@li... \n",
|
||
"1 Command line: BOOT_IMAGE=/boot/vmlinuz-5.10.0-... \n",
|
||
"2 x86/fpu: Supporting XSAVE feature 0x001: 'x87 ... \n",
|
||
"3 x86/fpu: Supporting XSAVE feature 0x002: 'SSE ... \n",
|
||
"4 x86/fpu: Supporting XSAVE feature 0x004: 'AVX ... \n",
|
||
".. ... \n",
|
||
"954 tux : TTY=pts/0 ; PWD=/home/tux ; USER=root ; ... \n",
|
||
"955 pam_unix(sudo:session): session opened for use... \n",
|
||
"956 pam_unix(sudo:session): session closed for use... \n",
|
||
"957 tux : TTY=pts/0 ; PWD=/home/tux ; USER=root ; ... \n",
|
||
"958 pam_unix(sudo:session): session opened for use... \n",
|
||
"\n",
|
||
"[959 rows x 5 columns]"
|
||
]
|
||
},
|
||
"execution_count": 18,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"import pandas as pd\n",
|
||
"df = pd.DataFrame(aufgabe_1())\n",
|
||
"df"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 22,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"aufgabe_2()"
|
||
]
|
||
}
|
||
],
|
||
"metadata": {
|
||
"kernelspec": {
|
||
"display_name": ".venv (3.13.3)",
|
||
"language": "python",
|
||
"name": "python3"
|
||
},
|
||
"language_info": {
|
||
"codemirror_mode": {
|
||
"name": "ipython",
|
||
"version": 3
|
||
},
|
||
"file_extension": ".py",
|
||
"mimetype": "text/x-python",
|
||
"name": "python",
|
||
"nbconvert_exporter": "python",
|
||
"pygments_lexer": "ipython3",
|
||
"version": "3.13.3"
|
||
}
|
||
},
|
||
"nbformat": 4,
|
||
"nbformat_minor": 2
|
||
}
|