150 lines
4.5 KiB
Markdown
150 lines
4.5 KiB
Markdown
# Übungen zu Dateien (Teil 1)
|
|
|
|
|
|
## Ausgangslage
|
|
|
|
Im Ordner `uebungen` sind folgende Textdateien mit Mitarbeiter- und
|
|
Planstellendaten vorhanden:
|
|
|
|
* `employee_skills.txt`
|
|
* `job_skills.txt`
|
|
* `salaries.txt`
|
|
* `salaries-errors.txt`
|
|
|
|
Jede dieser Dateien enthält einen Datensatz pro Zeile. Jede Zeile ist
|
|
nach folgendem Schema aufgebaut:
|
|
|
|
* Name
|
|
* Doppelpunkt
|
|
* Whitespace (ein oder mehrere Leerzeichen)
|
|
* Daten
|
|
|
|
Das Format des Datenfelds unterscheidet sich je nach Datei.
|
|
|
|
|
|
Aufgabe 1:
|
|
|
|
Öffnen Sie die Datei `employee_skills.txt` zum Lesen und lesen Sie die gesamte
|
|
Datei in einen String ein.
|
|
|
|
Wieviele Bytes ist der Dateihalt lang?
|
|
|
|
|
|
Aufgabe 2:
|
|
|
|
Öffnen Sie die Datei `employee_skills.txt` zum Lesen und lesen Sie die Datei
|
|
zeilenweise ein.
|
|
|
|
Wieviele Zeilen mit Daten enhält die Datei? Zeilen, die *nur* Whitespace
|
|
(Leerzeichen, CR, LF, Tabs, etc.) enthalten, werden nicht gezählt.
|
|
|
|
|
|
Aufgabe 3:
|
|
|
|
Öffnen Sie die Datei `employee_skills.txt` zum Lesen und lesen Sie die Datei
|
|
zeilenweise ein. Parsen Sie den Namen des Mitarbeiters aus jeder Datenzeile und
|
|
fügen Sie ihn zu einer Liste hinzu.
|
|
|
|
Geben Sie die Liste der Namen der Mitarbeiter alphabetisch sortiert, ein Name
|
|
pro Zeile, aus.
|
|
|
|
|
|
Tipp: verwenden Sie die String-Methode `split()` zum Parsen jeder Zeile.
|
|
|
|
Tipp 2: verwenden Sie zum Sortieren der Liste `list.sort()`.
|
|
|
|
|
|
Aufgabe 4:
|
|
|
|
Öffnen Sie die Datei `salaries.txt` zum Lesen und lesen Sie die Datei
|
|
zeilenweise ein. Parsen Sie den Namen des Mitarbeiters sowie das Gehalt aus
|
|
jeder Datenzeile und speichern die Daten in einem Dictionary mit dem Namen
|
|
des Mitarbeiters als Key und dem Gehalt als Wert. Der Gehaltswert sollte
|
|
jeweils in einen Integerwert umgewandelt werden.
|
|
|
|
Geben Sie das höchste, sowie das niedrigste Gehalt aus.
|
|
|
|
|
|
Tipp 1: verwenden Sie die String-Methode `split()` zum Parsen jeder Zeile und
|
|
die Funktion `int()` zum Umwandeln des Gehaltwerts.
|
|
|
|
Tipp 2: verwenden Sie die `min()` und `max()` Funktionen und wenden sie jeweils
|
|
auf alle Werte des Dictionaries auf einmal an.
|
|
|
|
|
|
Aufgabe 5:
|
|
|
|
Öffnen Sie die Datei `employee_skills.txt` zum Lesen und lesen Sie die Datei
|
|
zeilenweise ein. Parsen Sie den Namen des Mitarbeiters sowie die Liste der
|
|
Skills aus jeder Datenzeile und speichern die Daten in einem Dictionary mit dem
|
|
Namen des Mitarbeiters als Key und der Liste der Skills als Wert. Die Liste der
|
|
Skills für jeden Mitarbeiter sollte jeweils in eine Liste von Strings (ein
|
|
Element pro Skill) umgewandelt werden.
|
|
|
|
Tipp 1: verwenden Sie die String-Methode `split()` zum Parsen jeder Zeile und
|
|
nochmals zum Parsen der Liste der Skills. Dabei müssen jeweils unterschiedliche
|
|
Trennzeichen verwendet werden.
|
|
|
|
|
|
Aufgabe 6:
|
|
|
|
Kombinieren Sie die Programme aus Aufgabe 4 und 5 und kombinieren Sie die
|
|
beiden Dictionaries, die Sie aus den Daten erstellt haben.
|
|
|
|
Speichern Sie dabei das Gehalt und die Skills jedes Mitarbeiters jeweils
|
|
zusammen in einem Dictionary mit folgendem Format:
|
|
|
|
```py
|
|
employee_data = {
|
|
"salary": ..., # integer
|
|
"skills": [...], # list of strings
|
|
}
|
|
```
|
|
|
|
Speichern Sie alle Daten in einem Dictionary mit dem Namen des Mitarbeiters
|
|
als Key und dem `employee_data` Dictionary als Wert. Dadurch ergibt sich
|
|
folgende geschachtelte Datenstruktur:
|
|
|
|
```py
|
|
employees = {
|
|
"name 1": {
|
|
"salary": ...,
|
|
"skills": [...],
|
|
},
|
|
"name 2": {
|
|
"salary": ...,
|
|
"skills": [...],
|
|
},
|
|
...
|
|
}
|
|
```
|
|
|
|
|
|
Aufgabe 7:
|
|
|
|
Diese Aufgabe ist ähnlich wie Aufgabe 4, die einzulesende Datei enthält jedoch
|
|
mehrere Fehler, die Sie abfangen und behandeln müssen.
|
|
|
|
Öffnen Sie die Datei `salaries-errors.txt` zum Lesen und lesen Sie die Datei
|
|
zeilenweise ein. Parsen Sie den Namen des Mitarbeiters sowie das Gehalt aus
|
|
jeder Datenzeile und speichern die Daten in einem Dictionary mit dem Namen
|
|
des Mitarbeiters als Key und dem Gehalt als Wert. Der Gehaltswert sollte
|
|
jeweils in einen Integerwert umgewandelt werden.
|
|
|
|
Die Datei enthält folgende Fehler:
|
|
|
|
* Manche Zeilen sind auskommentiert (d.h. sie starten mit einem Hash (`#`).
|
|
dise Zeilen sollen ignoriert werden, d.h. sie werden nicht in den Daten
|
|
gespeichert.
|
|
* Bei manchen Zeilen fehlt der trennende Doppelpunkt zwischen dem Namen und
|
|
dem Gehalt. Fangen Sie diesen Fehler beim Parsen der Zeile ab und
|
|
ignorieren Sie entweder die Zeile oder versuchen Sie sie erneut mit einer
|
|
anderen Methode zu parsen.
|
|
* Bei manchen Mitarbeitern ist das Gehalt mit einem Währungssymbol angegeben.
|
|
Fangen Sie den Fehler beim Umwandeln des Gehaltwerts in einen Integer ab und
|
|
ignorieren Sie entweder die Zeile oder entfernen Sie das Währungssymbol vor
|
|
dem Parsen.
|
|
|
|
|
|
Geben Sie das höchste, sowie das niedrigste Gehalt aus.
|