Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
gf_informatik:daten:processing [2023-05-26 14:27] – hof | gf_informatik:daten:processing [2025-06-06 08:29] (aktuell) – [Aufgabe 6] hof | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
# Data Processing in Python | # Data Processing in Python | ||
+ | < | ||
{{ : | {{ : | ||
Zeile 6: | Zeile 7: | ||
Wieviel ist viel? 1000? | Wieviel ist viel? 1000? | ||
+ | |||
#### Aufgabe 1 | #### Aufgabe 1 | ||
Zeile 25: | Zeile 27: | ||
* Wenn Dateien gelesen oder geschrieben werden, müssen sie beim Betriebssystem reserviert werden. Mit `with` wird sichergestellt, | * Wenn Dateien gelesen oder geschrieben werden, müssen sie beim Betriebssystem reserviert werden. Mit `with` wird sichergestellt, | ||
- | * Die Datei (hier ' | + | * Die Datei (hier ' |
+ | * Der Typ einer Datei wird über die Dateierweiterung (`.txt`, en. _extension_) bestimmt. Windows versteckt die Endungen standardmässig, | ||
* `' | * `' | ||
#### Aufgabe 2 | #### Aufgabe 2 | ||
- | Lade die Datei [[https:// | + | Lade die Datei [[https:// |
- | . | + | |
+ | ##### Encoding | ||
+ | Achtung, Mac-Users: Die Datei verwendet die Latin1-Codierung, | ||
+ | |||
+ | <code python> | ||
+ | # Specify text encoding when opening a file. | ||
+ | with open(' | ||
+ | </ | ||
## Dateien schreiben | ## Dateien schreiben | ||
Schreiben funktioniert ganz ähnlich wie lesen, aber als zweites Argument muss `' | Schreiben funktioniert ganz ähnlich wie lesen, aber als zweites Argument muss `' | ||
Zeile 64: | Zeile 75: | ||
* `split(char)` erzeugt aus einem String eine Liste von Werten, die mit dem angegebenen Trennzeichen abgetrennt sind: | * `split(char)` erzeugt aus einem String eine Liste von Werten, die mit dem angegebenen Trennzeichen abgetrennt sind: | ||
* `" | * `" | ||
- | * `strip()` gibt den selben String zurück, aber ohne Leerschläge an beiden Enden. | + | * `strip()` gibt den selben String zurück, aber ohne Leerschläge an beiden Enden: |
+ | * `" | ||
Zeile 73: | Zeile 85: | ||
* Mit `print(values[1])` wird der Kanton (die zweite Spalte) ausgegeben. | * Mit `print(values[1])` wird der Kanton (die zweite Spalte) ausgegeben. | ||
* Wieviele Gemeinden gibt es im Kanton Thurgau? Wieviele im Kanton Bern? | * Wieviele Gemeinden gibt es im Kanton Thurgau? Wieviele im Kanton Bern? | ||
+ | |||
+ | <nodisp 1> | ||
+ | ++++Lösung: | ||
+ | < | ||
+ | be = 0 | ||
+ | tg = 0 | ||
+ | for line in infile: | ||
+ | tokens = line.split(',' | ||
+ | canton = tokens[1] | ||
+ | if canton == ' | ||
+ | tg = tg + 1 | ||
+ | elif canton == ' | ||
+ | be = be + 1 | ||
+ | print(" | ||
+ | print(" | ||
+ | </ | ||
+ | |||
+ | ++++ | ||
+ | </ | ||
Zeile 83: | Zeile 114: | ||
Allerdings funktioniert das nur, wenn der String auch wirklich eine Zahl darstellt. Sonst wird eine *Exception* geworfen; wir können sie mit `try...except` auffangen: | Allerdings funktioniert das nur, wenn der String auch wirklich eine Zahl darstellt. Sonst wird eine *Exception* geworfen; wir können sie mit `try...except` auffangen: | ||
- | <code python> | + | <html>< |
try: | try: | ||
my_number = int(" | my_number = int(" | ||
Zeile 89: | Zeile 120: | ||
except ValueError: | except ValueError: | ||
pass # executed if an exception was thrown | pass # executed if an exception was thrown | ||
- | </code> | + | </bottom-editor></ |
#### Aufgabe 5 | #### Aufgabe 5 | ||
Zeile 95: | Zeile 126: | ||
* welche Spalten (Indices) gehören zu diesen Werten? | * welche Spalten (Indices) gehören zu diesen Werten? | ||
* verwendest du `int()` oder `float()`? | * verwendest du `int()` oder `float()`? | ||
- | |||
#### Aufgabe 6 | #### Aufgabe 6 | ||
Zeile 109: | Zeile 139: | ||
++++ | ++++ | ||
- | < | + | < |
++++Code:| | ++++Code:| | ||
- | <code python> | + | <html>< |
def find_smallest_population(): | def find_smallest_population(): | ||
with open(' | with open(' | ||
+ | # Search for the smallest, so start out with a value larger than any expected. | ||
min_pop = 1000000 | min_pop = 1000000 | ||
town = None | town = None | ||
Zeile 119: | Zeile 150: | ||
cells = line.split(',' | cells = line.split(',' | ||
try: | try: | ||
+ | # Population is in the third column, and it is an integer. | ||
population = int(cells[2]) | population = int(cells[2]) | ||
if population < min_pop: | if population < min_pop: | ||
+ | # We found a town smaller than the currently known smallest. | ||
min_pop = population | min_pop = population | ||
town = cells[0] | town = cells[0] | ||
Zeile 128: | Zeile 161: | ||
print(" | print(" | ||
+ | </ | ||
+ | ++++ | ||
+ | </ | ||
+ | <nodisp 1> | ||
+ | ++++Code:| | ||
+ | < | ||
def find_largest_area(): | def find_largest_area(): | ||
with open(' | with open(' | ||
+ | # We search for the largest, so start with a small value. | ||
max_area = 0 | max_area = 0 | ||
town = None | town = None | ||
Zeile 136: | Zeile 176: | ||
cells = line.split(',' | cells = line.split(',' | ||
try: | try: | ||
+ | # Area is in the fourth column, and it is a floating point number. | ||
area = float(cells[3]) | area = float(cells[3]) | ||
if area > max_area: | if area > max_area: | ||
+ | # Found a town with larger area than the largest known so far. | ||
max_area = area | max_area = area | ||
town = cells[0] | town = cells[0] | ||
Zeile 145: | Zeile 187: | ||
print(" | print(" | ||
- | </code> | + | </bottom-editor></ |
++++ | ++++ | ||
</ | </ | ||
Zeile 155: | Zeile 197: | ||
* Wieviele Gemeinden hat der Kanton Glarus? | * Wieviele Gemeinden hat der Kanton Glarus? | ||
- | < | + | < |
++++Code:| | ++++Code:| | ||
- | <code python> | + | <html>< |
def summarize_canton(canton): | def summarize_canton(canton): | ||
with open(' | with open(' | ||
Zeile 211: | Zeile 253: | ||
summarize_canton(' | summarize_canton(' | ||
summarize_canton(' | summarize_canton(' | ||
- | </code> | + | </bottom-editor></ |
++++ | ++++ | ||
</ | </ |