Python Programm Wetterdaten lesen und darstellen?
Ich kenne mich leider kaum aus mit Python. Habe das jetzt im Studium und muss dort eine Hausarbeit bearbeiten.
Also ich habe eine Hausarbeit zu schreiben, bei der das Programm Wetterdaten aus einer Website herunterladen soll, diese dann auch öffnen soll und grafisch darstellen muss.
Ich habe damit angefangen und bekomme halt immer einige Fehler. Bis zum herunterladen einer Temperatur Datei komm ich, aber es lädt nicht alle herunter und öffnet die leider auch nicht.
Derzeit hab ich auch einen KeyError Fehler.
Auf den Bildern könnt ihr auch meine bisherigen Ergebnisse sehen.
Ich arbeite auch derzeit auf dem iPad mit Pythonista, da ich leider kein Computer zur Hand habe.
Also nochmal zusammengefasst:
- Mein Programm lädt nicht alle Daten aus der Website „https://www.lanuv.nrw.de/umwelt/luft/immissionen/berichte-und-trends/ tageswerte“
- Die CSV Datei wird koch nicht geladen
- Grafische Darstellung somit auch noch nicht möglich
Es wäre auch super wenn vielleicht ein freiwilliger bereit wäre Zwischenfragen privat beantworten zu können, da jedes mal als Anfänger Fragen auftauchen und der Professor erst in 1-2 Tagen immer antwortet.
Vielen dank im Vorraus
1 Antwort
Mein Programm lädt nicht alle Daten aus der Website (...)
Prüfe zunächst manuell im Browser, ob du an die gewünschten Dateien kommst / sie überhaupt herunterladen kannst. Möglicherweise wird dir der Zugriff generell schon versperrt.
Wenn du öfter auf die externe Quelle zugreifst, achte darauf, das nicht zu häufig in kurzer Zeit zu tun. Baue künstliche Verzögerungen ein.
Generell wäre es sicherlich nicht verkehrt, die Daten asynchron / über einen eigenen Thread zu laden (wenn sie nicht aufeinander basieren), um Ladezeiten einzusparen und den Hauptprozess nicht von diesen Prozessen abhängig zu machen. Wenn das Laden der Daten nicht klappt, kannst du sie möglicherweise überspringen und dem Nutzer stattdessen entsprechendes Feedback geben.
Die CSV Datei wird koch nicht geladen (...)
Lade dir die CSV-Datei einmal manuell herunter bzw. schau, wie du ihren Inhalt einsehen kannst. Die erste Zeile in der Datei ist relevant, denn die enthält die Keys, die der DictReader folgend nutzt, um die Informationen der folgenden Zeilen richtig einzuordnen.
Das heißt, wenn deine CSV-Datei so aussehen würde:
Firstname,Lastname,Age
Max,Mustermann,37
Klaus,Schulze,30
hättest du je Zeile Zugriff auf die Werte via der Keys aus der ersten Zeile:
reader = csv.DictReader(csvFile)
for row in reader:
print(row["Firstname"], row["Lastname"], row["Age"])
'''
output:
Max Mustermann 37
Klaus Schulze 30
'''
Bei deiner CSV-Datei wird es in der ersten Zeile aber ein Problem geben. Vielleicht existiert der Eintrag Datum gar nicht, es gibt generell keinen Header oder die Werte sind falsch / mit einem unüblichen Separator getrennt.
Das gilt es zunächst herauszufinden.
Je nachdem kannst du dir die Header selbst zusammenbauen. Beispielsweise mit einer festen Liste (worst case):
headers = ["Datum", "Zeit"]
for row in csv.DictReader(csvFile, fieldnames=headers):
# ...
Oder indem du die erste Zeile separat ausliest, selbst korrekt parst und dann für den Reader verwendest:
with open("your csv file...", newline="") as csvFile:
firstRow = csvFile.readline()
csvFile.seek(len(firstRow)) # skip first line
headers = [column.strip(',') for column in firstRow.split()]
# make some other fixes ...
for row in csv.DictReader(csvFile, fieldnames=headers):
# ...
Falls der Separator kein Komma sein sollte, kannst du dem Reader auch einen anderen übergeben. Das heißt, wenn die CSV-Datei bspw. eine Raute als Datentrenner nutzt:
Firstname#Lastname#Age
Max#Mustermann#37
Klaus#Schulze#30
kannst du so den Trenner bestimmen:
csv.DictReader(csvFile, delimiter = "#"):
den der Reader nutzen soll.
Es wäre auch super wenn vielleicht ein freiwilliger bereit wäre Zwischenfragen privat beantworten zu können
Wenn du Fragen hast, stelle sie hier / über neue Fragen. Diese Plattform ist öffentlich und die Antworten können möglicherweise mal jemanden anders weiterhelfen.
Ah super, danke für die Antworten. Werden es dann mal ausprobieren