Daten in einer mysql Tabelle sortieren

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Sirius3
User
Beiträge: 7052
Registriert: Sonntag 21. Oktober 2012, 17:20

Re: Daten in einer mysql Tabelle sortieren

Beitragvon Sirius3 » Mittwoch 7. Februar 2018, 20:48

@tz_wuerzburg: wie man Wörterbücher benutzt, gehört wirklich zu den absoluten Grundlagen. Der Code funktioniert nicht, weil »values« nicht definiert ist. Da eine nichtexistierende PLZ eigentlich ein Fehler ist, solltest Du einfach auf das Wörterbuch zugreifen und den eventuell auftretenden KeyError abfangen.
tz_wuerzburg
User
Beiträge: 22
Registriert: Dienstag 7. März 2017, 17:51

Re: Daten in einer mysql Tabelle sortieren

Beitragvon tz_wuerzburg » Donnerstag 8. Februar 2018, 09:10

Guten Morgen zusammen,
so habe ich das jetzt gelöst. Ich bin davon ausgegangen, dass eine Wörterbuch Line direkt ausgelesen werden kann und keine
weitere Schleife zum einlesen benötigt wird.
Jetzt habe ich noch ein kleines Problem. print (entry_adress) zeigt mir alles korrekt an, aber in der adressen_ausgabe.csv wird
der Wert area_code_output immer mit "PLZ_FALSCH" angezeigt.
Woran könnte das jetzt liegen?

Code: Alles auswählen

pal_gebiete = {}                                               
with open ("paletten_gebiete.csv", "r") as entry_pal:
    for line_pal in entry_pal:
        line_pal_split = line_pal.strip().split(";")
        pal_gebiete[line_pal_split[0]] = line_pal_split[1]
print (pal_gebiete)       


Code: Alles auswählen

for key_palette, value_palette in pal_gebiete.items():

    with open ("adressen_.csv","r") as input_lines_adress, open ("adressen_ausgabe.csv","w") as output:
   
        for entry_adress in input_lines_adress:
            entry_adress = entry_adress.strip().split(";")
            postal_code = (entry_adress[1])
       
            if postal_code == key_palette:
                area_code_output = value_palette
            else:
                area_code_output = "PLZ_FALSCH"
           
            entry_adress.append(area_code_output)
            output.write(";".join(entry_adress) + "\n")
   
            print (entry_adress)
Sirius3
User
Beiträge: 7052
Registriert: Sonntag 21. Oktober 2012, 17:20

Re: Daten in einer mysql Tabelle sortieren

Beitragvon Sirius3 » Donnerstag 8. Februar 2018, 11:02

@tz_wuerzburg: ja, auf ein Wörterbuch kann man direkt zugreifen. Mit welchem Tutorial lernst Du denn wie man Wörterbücher benutzt?

Deine doppelte for-Schleife ist ja auch Quatsch. Dass postal_code == key_palette ist, trifft nur auf einen Eintrag im Wörterbuch zu, für alle anderen wird PLZ_FALSCH ausgegeben. Dass an Deinem Programm etwas nicht stimmt, solltest Du eigentlich an der Ausgabe sehen, weil jeder Eintrag zig-mal ausgegeben wird.

Wir können (wollen) Dir hier nicht das Lernen abnehmen. Fang doch mit einfachen Beispielen zu Wörterbüchern an, bis Du verstanden hast, wie man sie benutzt.
tz_wuerzburg
User
Beiträge: 22
Registriert: Dienstag 7. März 2017, 17:51

Re: Daten in einer mysql Tabelle sortieren

Beitragvon tz_wuerzburg » Donnerstag 8. Februar 2018, 14:43

Ich hoffe, dass ich jetzt verstanden habe. Den Zugriff auf das Wörterbuch mit "festen" Werten hatte ich ein paar mal im Kurs,
nur bin ich nicht auf die Idee gekommen die Variable dort einzusetzten.

Hier das Ergebnis (die Augabe Daten sehen gut aus):

Code: Alles auswählen

pal_gebiete = {}                                                # pal_gebiete = Datentyp Dictionary
with open ("paletten_gebiete.csv", "r") as entry_pal:           # Zugriff auf .csv (lesen)
    for line_pal in entry_pal:                                  # Schleife beginnen, lesen der .csv (Zeile für Zeile)
        line_pal_split = line_pal.strip().split(";")            # Zeilenumbruch entfernen \n, Werte splitten ";"
        pal_gebiete[line_pal_split[0]] = line_pal_split[1]      # pal_gebiete[Schlüssel zuweisen[Index]] = Werte zuweisen[Index]
print (pal_gebiete)                                             # wenn Schleife am Ende, Wörterbuch anzeigen


Code: Alles auswählen

with open ("adressen.csv","r") as input_lines_adress, open ("adressen_ausgabe.csv","w") as output:  # Zugriff auf .csv lesen bzw. schreiben
                                                               
    for entry_adress in input_lines_adress:                     # Schleife beginnen (lesen der input .csv (Zeile für Zeile)
        entry_adress = entry_adress.strip().split(";")          # input Zeilenumbruch entfernen \n, Werte splitten ";"
        postal_code = (entry_adress[1])                         # Wert [Index] aus der Liste in Variable übernehmen
       
        if postal_code in pal_gebiete:                          # wenn die PLZ im Palettenschlüssel vorhanden ist
            area_code_output = pal_gebiete[postal_code]         # dann gebe den jeweiligen Wert des Schlüssels aus [Wert zu dieser Variable]
        else:                                                   # ansonsten
            area_code_output = "PLZ_FALSCH"                     # setze die Variable auf "Falsch"
           
        entry_adress.append(area_code_output)                   # füge der gesamten Liste Zeile für Zeile den jeweiligen Wert hinzu
        output.write(";".join(entry_adress) + "\n")             # schreibe die Daten in das output file, ";" getrennt, \n Zeilenumbruch einfügen
   
        print (entry_adress)

Wer ist online?

Mitglieder in diesem Forum: Google [Bot]