Skip to content

10. Anwendungsübung: Version 2

Image

Diese neue Version führt die folgende Datei „[config.py]“ ein:


def configure():
    import os

    # Absoluter Pfad zum Ordner dieses Skripts
    script_dir = os.path.dirname(os.path.abspath(__file__))

    # Stammverzeichnis, von dem aus bestimmte relative Pfade gemessen werden
    root_dir = "C:/Data/st-2020/dev/python/cours-2020/python3-flask-2020/impots"

    # Abhängigkeiten der Anwendung
    absolute_dependencies = [
        f"{root_dir}/v01/shared",
    ]

    # Konfiguration der Anwendung
    config = {
        # absoluter Pfad zur Steuerzahlerdatei
        "taxpayersFilename"f"{script_dir}/../data/taxpayersdata.txt",
        # Absoluter Pfad zur Ergebnisdatei
        "resultsFilename"f"{script_dir}/../data/résultats.txt"
    }

    # Aktualisierung des Syspath
    from myutils import set_syspath
    set_syspath(absolute_dependencies)

    # Konfiguration wird wiederhergestellt
    return config

Kommentare

  • Zeile 5: Hier wird der absolute Pfad des Ordners abgerufen, der das auszuführende Skript enthält, in diesem Fall das Skript [config.py]. Man erhält somit den absoluten Pfad des Ordners [main]. Dieser Ordner enthält auch das Hauptskript [main.py];
  • Zeile 8: Wenn eine referenzierte Datei nicht zum Anwendungsordner gehört, wird nicht [script_dir] verwendet, um sie zu finden, sondern [root_dir]. Diese Zeile muss geändert werden, sobald die Anwendung ihren Speicherort im Dateisystem wechselt;
  • Zeilen 11–13: Hier werden die absoluten Pfade aller Ordner aufgeführt, die sich im Python-Pfad befinden müssen, damit die Anwendung funktioniert. In Zeile 12 wird auf den Ordner [shared] der Version 1 der Anwendungsübung verwiesen;
  • Zeilen 16–21: Hier wird die Konfiguration der Anwendung in einem Wörterbuch namens [config] definiert. Hier werden die absoluten Pfade der von der Anwendung verarbeiteten Textdateien eingetragen. Dazu wird [script_dir] verwendet, das – wie bereits erwähnt – hier den Ordner [main] bezeichnet;
  • Zeilen 24–25: Hier wird der für die Anwendung erforderliche Python-Pfad festgelegt;

Das Hauptskript [main.py] lautet wie folgt:


# die Anwendung wird konfiguriert
import config

config = config.configure()

# Der Syspath ist konfiguriert – die Importe können durchgeführt werden
from impôts_module_01 import calcul_impôt, record_results, get_taxpayers_data

# Steuerpflichtigen-Datei
taxpayers_filename = config['taxpayersFilename']
# Ergebnisdatei
results_filename = config['resultsFilename']

# Code
try:

    # Einlesen der Steuerpflichtigen-Daten
    taxpayers = get_taxpayers_data(taxpayers_filename)
    # Ergebnisliste
    results = []
    # Berechnung der Steuer der Steuerzahler
    for taxpayer in taxpayers:
        # Die Steuerberechnung gibt ein Schlüsselwörterbuch zurück
        # ['marié', 'enfants', 'salaire', 'impôt', 'surcôte', 'décôte', 'réduction', 'taux']
        result = calcul_impôt(taxpayer['marié'], taxpayer['enfants'], taxpayer['salaire'])
        # Das Wörterbuch wird zur Ergebnisliste hinzugefügt
        results.append(result)
    # Die Ergebnisse werden gespeichert
    record_results(results_filename, results)
except BaseException as erreur:
    # Es können verschiedene Fehler auftreten: fehlende Datei, falscher Dateiinhalt
    # Der Fehler wird angezeigt und die Anwendung wird beendet
    print(f"L'erreur suivante s'est produite : {erreur}]\n")
finally:
    print("Travail terminé...")

Kommentare

  • Zeilen 1–4: Die Anwendung wird konfiguriert;
  • Zeile 7: Nach der Konfiguration ist der Python-Pfad korrekt und enthält insbesondere den Ordner „[shared]“, in dem sich das Skript „[impôts_module_01]“ befindet. Aus diesem Skript werden die benötigten Funktionen importiert;
  • Zeilen 9–12: Die Namen der verwendeten Dateien werden in der Konfiguration gefunden. Es handelt sich um absolute Pfadnamen;
  • Zeilen 14–35: Hier findet sich der Code aus Version 1;

Version 1 funktionierte in einer Python-Konsole nicht. In derselben Konsole liefert Version 2 die folgenden Ergebnisse:

(venv) C:\Data\st-2020\dev\python\cours-2020\python3-flask-2020\impots\v02>python main/main.py
Travail terminé...

Es treten nun keine Fehler mehr auf.