Python Programm Wetterdaten lesen und darstellen?

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.

DeLuXeHD 
Fragesteller
 06.02.2020, 02:33

Ah super, danke für die Antworten. Werden es dann mal ausprobieren

0