Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
gf_informatik:daten:processing [2026-05-25 08:13] – [Dateioperationen mit Python] hofgf_informatik:daten:processing [2026-06-01 10:14] (aktuell) – [Aufgabe 7] hof
Zeile 10: Zeile 10:
  
 Finde heraus, bei wie vielen Zeilen Excel oder Google Sheets in die Knie gehen. Finde heraus, bei wie vielen Zeilen Excel oder Google Sheets in die Knie gehen.
 +
 ## Das Dateisystem ## Das Dateisystem
 Alle Dateien sind im Permanentspeicher in einer _hierarchischen Ordnerstruktur_ abgelegt. Mit Python kann die Ordnerstruktur gelesen und manipuliert werden. Damit eine Datei gelesen oder beschrieben werden kann, muss sie zuerst geöffnet werden. Alle Dateien sind im Permanentspeicher in einer _hierarchischen Ordnerstruktur_ abgelegt. Mit Python kann die Ordnerstruktur gelesen und manipuliert werden. Damit eine Datei gelesen oder beschrieben werden kann, muss sie zuerst geöffnet werden.
Zeile 17: Zeile 18:
   * ein _absoluter_ Pfad gibt die Ordner-Hierarchie vom obersten Knoten her an und beginnt mit einem Laufwerksbuchstaben oder einem Schrägstrich, z.B. `C:/Users/Nutzername/Meine_Dateien/beispiel.txt` oder `/Users/Nutzername/Downloads/beispiel.txt`.   * ein _absoluter_ Pfad gibt die Ordner-Hierarchie vom obersten Knoten her an und beginnt mit einem Laufwerksbuchstaben oder einem Schrägstrich, z.B. `C:/Users/Nutzername/Meine_Dateien/beispiel.txt` oder `/Users/Nutzername/Downloads/beispiel.txt`.
   * ein _relativer_ Pfad identifiziert eine Datei von einem Referenz-Ordner her, oft vom Arbeits-Ordner des Programms. Wird das Programm im Ordner `C:/Users/Nutzername` ausgeführt, so zeigt der relative Pfad `Meine_Dateien/beispiel.txt` auf die gleiche Datei wie oben.   * ein _relativer_ Pfad identifiziert eine Datei von einem Referenz-Ordner her, oft vom Arbeits-Ordner des Programms. Wird das Programm im Ordner `C:/Users/Nutzername` ausgeführt, so zeigt der relative Pfad `Meine_Dateien/beispiel.txt` auf die gleiche Datei wie oben.
 +
 +Es gibt zwei spezielle Pfadnamen:
 +  * `.` der einzelne Punkt zeigt auf den aktuellen Arbeits-Ordner.
 +    * `Meine_Dateien/beispiel.txt` und `./Meine_Dateien/beispiel.txt` zeigen auf die gleiche Datei.
 +  * `..` zwei Punkte zeigen auf das Eltern-Verzeichnis:
 +    * `Meine_Dateien/../beispiel.txt` zeigt auf `beispiel.txt` im aktuellen Ordner.
  
 ### Dateinamen und Erweiterungen ### Dateinamen und Erweiterungen
Zeile 25: Zeile 32:
  
 Windows versteckt die Erweiterung standardmässig, es empfiehlt sich, [[https://support.microsoft.com/de-de/windows/allgemeine-dateierweiterungen-in-windows-da4a4430-8e76-89c5-59f7-1cdbbc75cb01|sie anzuzeigen]]. Windows versteckt die Erweiterung standardmässig, es empfiehlt sich, [[https://support.microsoft.com/de-de/windows/allgemeine-dateierweiterungen-in-windows-da4a4430-8e76-89c5-59f7-1cdbbc75cb01|sie anzuzeigen]].
 +
 ### Dateioperationen mit Python ### Dateioperationen mit Python
 Mit `os.listdir` können wir die Dateien im momentanen Arbeitsverzeichnis auflisten: Mit `os.listdir` können wir die Dateien im momentanen Arbeitsverzeichnis auflisten:
Zeile 33: Zeile 41:
 print(listdir()) print(listdir())
 </bottom-editor> </bottom-editor>
- 
- 
 ## Dateien einlesen ## Dateien einlesen
 Grossen Datenmengen sind natürlich nur ein Grund, weshalb wir mit einem Programm Daten lesen und schreiben wollen. Andere Gründe: wir wollen Benutzerdaten lesen oder speichern können, den Programmzustand abspeichern (und beim Neustart wieder einlesen), etc. Grossen Datenmengen sind natürlich nur ein Grund, weshalb wir mit einem Programm Daten lesen und schreiben wollen. Andere Gründe: wir wollen Benutzerdaten lesen oder speichern können, den Programmzustand abspeichern (und beim Neustart wieder einlesen), etc.
Zeile 40: Zeile 46:
 Wie lesen wir Daten in einer Text-Datei? Wie lesen wir Daten in einer Text-Datei?
    
-<bottom-editor id="read" zip="https://bottom.ch/ksr/2m/data/2m.zip">+<bottom-editor id="read" session="read" zip="https://bottom.ch/ksr/2m/data/2m.zip">
 # Opens a file for reading (and closes it again after the 'with'). # Opens a file for reading (and closes it again after the 'with').
 with open('beispiel.txt', 'r') as infile: with open('beispiel.txt', 'r') as infile:
Zeile 52: Zeile 58:
    * Wenn Dateien gelesen oder geschrieben werden, müssen sie beim Betriebssystem reserviert werden. Mit `with` wird sichergestellt, dass die Datei nicht offen bleibt sondern nach dem Lesevorgang wieder geschlossen wird.    * Wenn Dateien gelesen oder geschrieben werden, müssen sie beim Betriebssystem reserviert werden. Mit `with` wird sichergestellt, dass die Datei nicht offen bleibt sondern nach dem Lesevorgang wieder geschlossen wird.
    * Die Datei (hier `beispiel.txt`) muss sich im Ordner befinden, wo Python ausgeführt wird.    * Die Datei (hier `beispiel.txt`) muss sich im Ordner befinden, wo Python ausgeführt wird.
-   * Der Typ einer Datei wird über die Dateierweiterung (`.txt`, en. _extension_) bestimmt. Windows versteckt die Endungen standardmässig, es ist empfehlenswert, [[https://support.microsoft.com/de-de/windows/allgemeine-dateierweiterungen-in-windows-da4a4430-8e76-89c5-59f7-1cdbbc75cb01|diese anzuzeigen]]. 
    * `'r'` bedeutet *read*, dass die Textdatei nur gelesen und nicht verändert wird.    * `'r'` bedeutet *read*, dass die Textdatei nur gelesen und nicht verändert wird.
 +
  
 #### Aufgabe 2 #### Aufgabe 2
  
-Lade die Datei [[https://kantonsschuleromanshorn.sharepoint.com/:f:/s/FSInformatik/Ek-Hi_stH2RMjDa-wQN9jekBMeF_YD6rvhmibDlNglGWxw?e=Y3AX65|gemeinden.csv]] herunter und speichere sie im Ordner, wo du dein Python-Programm abspeicherst. Verwende obigen Python-Code, um herauszufinden, wieviel Zeilen die Datei hat.+Lade die Datei [[https://kantonsschuleromanshorn.sharepoint.com/:f:/s/FSInformatik/Ek-Hi_stH2RMjDa-wQN9jekBMeF_YD6rvhmibDlNglGWxw?e=Y3AX65|gemeinden.csv]] herunter und speichere sie im Ordner, wo du dein Python-Programm abspeicherst. Verwende obigen Python-Code, um herauszufinden, wieviele Zeilen die Datei hat
 + 
 +Alternativ dazu kannst du auch direkt obigen Code modifizieren - die Datei `gemeinden.csv` ist bereits hinterlegt.
  
 ##### Encoding ##### Encoding
-Achtung, Mac-Users: Die Datei verwendet die Latin1-Codierung, einer Erweiterung von [[gf_informatik:verschluesselung:codierung|ASCII]], um auch Umlaute anzeigen zu können. Diese ist in Windows voreingestellt. MacOS hingegen verwendet standardmässig die universelle Unicode (UTF-8) Codierung. Beim Öffnen der Datei kann die Abweichung korrigiert werden:+Achtung, Mac-Users: Die Datei verwendet in Mitteleuropa die Latin1-Codierung, einer Erweiterung von [[gf_informatik:verschluesselung:codierung|ASCII]], um auch Umlaute anzeigen zu können. Diese ist in Windows voreingestellt. MacOS hingegen verwendet standardmässig die universelle Unicode (UTF-8) Codierung. Beim Öffnen der Datei kann die Abweichung korrigiert werden:
  
 <code python> <code python>
Zeile 85: Zeile 93:
 Beschreibe eine Datei mit einigen Zeilen. Es ist ungünstig, mehr als einige zehntausend Zeilen zu schreiben... Beschreibe eine Datei mit einigen Zeilen. Es ist ungünstig, mehr als einige zehntausend Zeilen zu schreiben...
 ## CSV-Format ## CSV-Format
-Die Datei `gemeinden.csv` ist im [[wpde>CSV_(Dateiformat)|Comma-Separated-Values]] Format gespeichert: Die Daten sind ganz ähnlich gespeichert wie in einer Tabelle und können auch mit Excel und Sheets geöffnet werden. Jede Zeile entspricht einer Zeile der Tabelle; die Spalten sind meist mit Kommas voneinander getrennt. Manchmal werden aber auch Semikolons (`;`) oder ein Tabulator (`\t`) als Trennzeichen verwendet.+Die Datei `gemeinden.csv` ist im [[wpde>CSV_(Dateiformat)|Comma-Separated-Values]] Format gespeichert: Die Daten sind ganz ähnlich gespeichert wie in einer Tabelle und können auch mit Excel und Sheets geöffnet werden. Jede Zeile entspricht einer Zeile der Tabelle; die Spalten sind meist mit Kommas voneinander getrennt. Manchmal werden aber auch Semikolons (`;`) oder ein [[wpde>Tabulatorzeichen|Tabulator]] (`\t`) als Trennzeichen verwendet.
  
-Oft werden in der ersten Zeile die Namen der abgespeicherten Werte festgelegt:+Oft werden in der ersten Zeile die Spaltennamen festgelegt:
  
 <code csv> <code csv>
Zeile 101: Zeile 109:
   * `strip()` gibt den selben String zurück, aber ohne Leerschläge oder anderen _Whitespace_ (Zeilenumbrüche...) an beiden Enden:   * `strip()` gibt den selben String zurück, aber ohne Leerschläge oder anderen _Whitespace_ (Zeilenumbrüche...) an beiden Enden:
     * `"  Romans Horn  ".strip()` gibt `"Romans Horn"` zurück.     * `"  Romans Horn  ".strip()` gibt `"Romans Horn"` zurück.
 +
  
 #### Aufgabe 4 #### Aufgabe 4
Zeile 109: Zeile 118:
   * Wieviele Gemeinden gibt es im Kanton Thurgau? Wieviele im Kanton Bern?   * Wieviele Gemeinden gibt es im Kanton Thurgau? Wieviele im Kanton Bern?
  
-<bottom-exercise hidesolution id="count" zip="https://bottom.ch/ksr/2m/data/2m.zip">+<bottom-exercise showsolution id="count" zip="https://bottom.ch/ksr/2m/data/2m.zip">
 <script type="text/x-starter"> <script type="text/x-starter">
 with open('gemeinden.csv', 'r') as infile: with open('gemeinden.csv', 'r') as infile:
Zeile 132: Zeile 141:
 </script> </script>
 </bottom-exercise> </bottom-exercise>
- 
  
 ## Text in Zahlen umwandeln. ## Text in Zahlen umwandeln.
Zeile 147: Zeile 155:
     print(my_number)        # only executes if the above was successful     print(my_number)        # only executes if the above was successful
 except ValueError: except ValueError:
-    pass                    # executed if an exception was thrown+    print("not a number"  # executed if an exception was thrown
 </bottom-editor> </bottom-editor>
- 
 #### Aufgabe 5 #### Aufgabe 5
 Benütze `try...except` um in deinem Code die Bevölkerung und die Fläche der Gemeinden auszulesen. Benütze `try...except` um in deinem Code die Bevölkerung und die Fläche der Gemeinden auszulesen.
Zeile 156: Zeile 163:
    * wie gross ist die Bevölkerung des Kanton Thurgau?    * wie gross ist die Bevölkerung des Kanton Thurgau?
  
-<bottom-exercise hidesolution id="sum-tg" zip="https://bottom.ch/ksr/2m/data/2m.zip">+<bottom-exercise showsolution id="sum-tg" zip="https://bottom.ch/ksr/2m/data/2m.zip">
 <script type="text/x-starter"> <script type="text/x-starter">
 with open('gemeinden.csv', 'r') as infile: with open('gemeinden.csv', 'r') as infile:
Zeile 177: Zeile 184:
 </script> </script>
 </bottom-exercise> </bottom-exercise>
- 
- 
 #### Aufgabe 6 #### Aufgabe 6
 Schreibe Python-Code, um die folgenden Fragen zu beantworten: Schreibe Python-Code, um die folgenden Fragen zu beantworten:
Zeile 188: Zeile 193:
   * kleinste Bevölkerung: Kammersrohr (32 Einwohner)   * kleinste Bevölkerung: Kammersrohr (32 Einwohner)
   * grösste Fläche: Scuol ($438.76 km^2$)   * grösste Fläche: Scuol ($438.76 km^2$)
-  * Einwohner: $8670125$+  * Einwohner: $9050451$
 ++++ ++++
  
-<bottom-exercise id="find-smallest" hidesolution zip="https://bottom.ch/ksr/2m/data/2m.zip" style="max-height:18lh;">+<bottom-exercise id="find-smallest" showsolution zip="https://bottom.ch/ksr/2m/data/2m.zip" style="max-height:18lh;">
 <script type="text/x-starter"> <script type="text/x-starter">
 def find_smallest_population(): def find_smallest_population():
Zeile 219: Zeile 224:
 </bottom-exercise> </bottom-exercise>
  
-<bottom-exercise id="find-largest" hidesolution zip="https://bottom.ch/ksr/2m/data/2m.zip" style="max-height:18lh;">+<bottom-exercise id="find-largest" showsolution zip="https://bottom.ch/ksr/2m/data/2m.zip" style="max-height:18lh;">
 <script type="text/x-starter"> <script type="text/x-starter">
 def find_largest_area(): def find_largest_area():
Zeile 246: Zeile 251:
 </script> </script>
 </bottom-exercise> </bottom-exercise>
- 
 #### Aufgabe 7 #### Aufgabe 7
 Erweitere den Code, um folgende Fragen zu beantworten: Erweitere den Code, um folgende Fragen zu beantworten:
Zeile 254: Zeile 258:
  
  
-<bottom-exercise id="summarize-canton" hidesolution zip="https://bottom.ch/ksr/2m/data/2m.zip" style="max-height:18lh;">+<bottom-exercise id="summarize-canton" showsolution zip="https://bottom.ch/ksr/2m/data/2m.zip" style="max-height:18lh;">
 <script type="text/x-starter"> <script type="text/x-starter">
 def summarize_canton(canton): def summarize_canton(canton):
  • gf_informatik/daten/processing.1779696797.txt.gz
  • Zuletzt geändert: 2026-05-25 08:13
  • von hof