Daten in einer mysql Tabelle sortieren

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Benutzeravatar
__deets__
User
Beiträge: 2155
Registriert: Mittwoch 14. Oktober 2015, 14:29

Re: Daten in einer mysql Tabelle sortieren

Beitragvon __deets__ » Donnerstag 25. Januar 2018, 16:58

Wenn du dir Muehe gibst, kannst du bestimmt noch irgendwo ein int(database) mehr unterbringen :wink:

Das erste ist notwendig. Die beiden danach nicht, und es ist ungewoehnlich, einen Namen dann an einen anderen Wert zu binden, der auch noch einen anderen Datentyp hat. Statt also immer database zu recyceln, nenn die Variable anders (wie kann ich an dem Snippet nun auch nicht erkennen)

Und danach nochmal str(database) ist natuerlich ebenfalls voellig ueberfluessig, wenn da schon ein string drin ist.
tz_wuerzburg
User
Beiträge: 22
Registriert: Dienstag 7. März 2017, 17:51

Re: Daten in einer mysql Tabelle sortieren

Beitragvon tz_wuerzburg » Freitag 26. Januar 2018, 10:19

@deets.
Vielen Dank für deine Hinweise. Der Code ist jetzt überarbeitet und sollte so jetzt passen.
Schreibe das Ergebnis jetzt noch in eine andere .csv, für das Erfolgserlebnis :)

Code: Alles auswählen

database = []
ready = []

with open ("adressen.csv","r") as file, open ("adressen_ausgabe.csv","w") as ausgabe:
   
    for data in file:
        data = data.strip().split(";")
        plz_data = data[1]
        plz_3digits = int(plz_data[:3])
       
        if plz_3digits >= 100 and plz_3digits <= 249:
            plz_3digits = "Text 1"
        elif plz_3digits >= 250 and plz_3digits <= 299:
            plz_3digits = "Text 2"
        else:
            plz_3digits = "Text 3"
 
        ready = (data[0] + "; " + data[1] + "; " + data[2] + "; " + plz_3digits + "\n")
   
        print (ready)
       
        ausgabe.write(ready)
Sirius3
User
Beiträge: 7052
Registriert: Sonntag 21. Oktober 2012, 17:20

Re: Daten in einer mysql Tabelle sortieren

Beitragvon Sirius3 » Freitag 26. Januar 2018, 11:04

@tz_wuerzburg: Du benutzt immer noch die selbe Variable für PLZ und PLZ-Gebiet, nur dass es nun plz_3digits statt database heißt.
Wenn Du Dich die ersten beiden Ziffern nicht interessieren, dann nimmt man die 5-stellige PLZ und teilt sie durch 100. Hier würde ich aber einfach auf die 5 Stellen prüfen. Benutze ';'.join oder gleich besser das csv-Modul. database und ready werden initalisiert aber nicht benutzt.

  1. with open("adressen.csv") as input_lines, open("adressen_ausgabe.csv", "w") as output:
  2.     for entry in input_lines:
  3.         entry = entry.strip().split(";")
  4.         postal_code = int(entry[1])
  5.         if postal_code >= 10000 and postal_code <= 24999:
  6.             area_code = "Text 1"
  7.         elif postal_code >= 25000 and postal_code <= 29999:
  8.             area_code = "Text 2"
  9.         else:
  10.             area_code = "Text 3"
  11.         entry.append(area_code)
  12.         output.write(';'.join(entry) + '\n')


Die Herausforderung, die Daten aus einer zweiten Datei herhauszuholen, hast Du aufgegeben??
tz_wuerzburg
User
Beiträge: 22
Registriert: Dienstag 7. März 2017, 17:51

Re: Daten in einer mysql Tabelle sortieren

Beitragvon tz_wuerzburg » Freitag 26. Januar 2018, 11:59

@Sirius3.
Vielen Dank, der Code funktioniert einwandfrei.
Jetzt möchte ich einen Schritt weiter gehen und die PLZ Werte, die abgeglichen werden sollen auch
aus einer .csv ziehen und als Variable weiter verarbeiten.
Ich weiß leider nur nicht wie, bzw. habe ich die Logik dahinter noch nicht verstanden.

In erster Instanz öffne ich die "paletten_gebiete.csv", lege mir diese für meinen Code zurecht,
beende die Schleife dann aber wieder ohne damit in der zweiten Schleife etwas anfangen zu können.

Hier liegt mein Problem. Wie kann ich die Variablen "pal_zip_begin", "pal_zip_end" und den "area_code"
behalten und in dem Script weiter verwerten?

Code: Alles auswählen


with open ("paletten_gebiete.csv", "r") as input_lines_pallet:
   
    for entry_pal in input_lines_pallet:
        entry_pal = entry_pal.strip().split(";")
        pal_zip_begin = int(entry_pal[1])
        pal_zip_end = int(entry_pal[2])
        area_code = (entry_pal[3])
       
       
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 = int(entry_adress[1])
       
        if postal_code >= pal_zip_begin and postal_code <= pal_zip_end:
            area_code_output = area_code
        elif postal_code >= pal_zip_begin and postal_code <= pal_zip_end:
            area_code_output = area_code
        else:
            area_code_output = area_code
 
        entry_adress.append(area_code_output)
        output.write(";".join(entry_adress) + "\n")
   
        print (entry_adress)
Benutzeravatar
__deets__
User
Beiträge: 2155
Registriert: Mittwoch 14. Oktober 2015, 14:29

Re: Daten in einer mysql Tabelle sortieren

Beitragvon __deets__ » Freitag 26. Januar 2018, 12:09

Du musst sie in eine Datenstruktur stecken. Welche dazu geeignet ist kann ich nicht sagen, das haengt davon ab, was du damit machen willst.
tz_wuerzburg
User
Beiträge: 22
Registriert: Dienstag 7. März 2017, 17:51

Re: Daten in einer mysql Tabelle sortieren

Beitragvon tz_wuerzburg » Freitag 26. Januar 2018, 12:59

Mit Datenstruktur meinst du Liste, Wörterbuch oder Tupel?
Benutzeravatar
__deets__
User
Beiträge: 2155
Registriert: Mittwoch 14. Oktober 2015, 14:29

Re: Daten in einer mysql Tabelle sortieren

Beitragvon __deets__ » Freitag 26. Januar 2018, 13:03

Grundsätzlich ja, im vorliegenden Fall nur die ersten zwei. Ein Tupel ist technisch möglich aber eine schlechte Wahl weil es nicht auf Wachstum ausgelegt ist.
tz_wuerzburg
User
Beiträge: 22
Registriert: Dienstag 7. März 2017, 17:51

Re: Daten in einer mysql Tabelle sortieren

Beitragvon tz_wuerzburg » Mittwoch 31. Januar 2018, 19:05

Guten Abend Leute,
ich hänge mal wieder. Aktuell versuche ich die paletten_gebiete.csv einzulesen und die entstandene Liste in ein Wörterbuch zu wandeln.
Leider ohne Erfolg. Habt ihr noch einen Tipp für mich?

PS. Der Thread heißt ja "Daten in einer mysql Tabelle sortieren". Ist ja nicht mehr wirklich aktuell. Kann das geändert werden?
Z.B. in "Listen mit Variablen aus einem Wörterbuch anreichern".

Code: Alles auswählen

def pal_func():
   
    with open ("paletten_gebiete.csv", "r") as entry_pal:
        for line in entry_pal:
            line_split = line.strip().split(";")
            #print (line_split)
            row1 = [line_split[0]]
            row2 = [line_split[1]]
            #print (row1)
            #print (row2)
            pal_dic = {}
            pal_dic[row1] = row2
            print (pal_dic)
           
Sirius3
User
Beiträge: 7052
Registriert: Sonntag 21. Oktober 2012, 17:20

Re: Daten in einer mysql Tabelle sortieren

Beitragvon Sirius3 » Mittwoch 31. Januar 2018, 19:38

@tz_wuerzburg: damit eine Funktion etwas sinnvolles macht, braucht sie einen Rückgabewert. Was soll zurückgegeben werden? Was hast Du Dir bei `row1` und `row2` gedacht? Warum sind das Listen mit genau einem Element? Was wären bessere Namen, statt row1 und row2? Warum erstellst Du für jede Zeile ein Wörterbuch mit genau einem Element?
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 1. Februar 2018, 22:52

@Sirius3: Meine Datei paletten_gebiete.csv lese ich Zeile für Zeile in eine Liste aus und möchte mir daraus ein Wörterbuch schreiben.
Im Idealfall soll es dann so aussehen:
{'10000': 'TEXT1', '10100': 'TEXT2', '10200': 'TEXT3', '10300': TEXT4'}
usw.
Dieses Wörterbuch möchte ich dann wiederum nutzen um eine PLZ aus der Liste "adressen" mit diesem abzugleichen und den entsprechenden Wert in meiner Datei adressen.csv anreichern.

Die Funktion soll also ein Wörterbuch ausgeben. (Den key mit PLZ vergleichen und den Wert anreichern)

Ich bin mir aber nicht wirklich sicher, ob ich das so richtig sinnvoll angehe.
Wenn ich meine Liste "adressen" mit einer for Schleife mit dem Wörterbuch abgleiche müssen ja alle Werte in meinem Wörterbuch in einer "line" stehen um dieses nicht auch mit einer weiteren Schleife auslesen zu müssen. (was meines wissens nicht geht)

Ich hoffe ihr versteht was ich meine :)
Sirius3
User
Beiträge: 7052
Registriert: Sonntag 21. Oktober 2012, 17:20

Re: Daten in einer mysql Tabelle sortieren

Beitragvon Sirius3 » Donnerstag 1. Februar 2018, 23:45

@tz_wuerzburg: wir verstehen Dich, aber verstehst Du auch, was Du geschrieben hast? Konkret, kannst Du auch meine restlichen Fragen beantworten?
tz_wuerzburg
User
Beiträge: 22
Registriert: Dienstag 7. März 2017, 17:51

Re: Daten in einer mysql Tabelle sortieren

Beitragvon tz_wuerzburg » Montag 5. Februar 2018, 16:19

Hallo zusammen, ich denke ich habe es gelöst.
Zwar ist es noch keine Funktion, aber es scheint genau das zu tun, was ich mir wünsche :)
Baue die Variable, bzw. final dann die hoffentlich die Funktion in mein anderes Skript und berichte dann noch einmal.

Code: Alles auswählen

pal_gebiete = {}                                                         # pal_gebiete = Datentyp Dictionary
with open ("paletten_gebiete.csv", "r") as entry_pal:           # öffnen der .csv (lesen)
    for line_pal in entry_pal:                                        # lesen der .csv (Zeile für Zeile)
        line_pal_split = line_pal.strip().split(";")                  # Zeilenumbruch entfernen, Semikolon als Trennzeichen
        pal_gebiete[line_pal_split[0]] = line_pal_split[1]         # d[Keyzeile bestimmen] = Valuezeile bestimmen
print (pal_gebiete)                                                   # wenn Schleife am Ende, letzte Zeile ausgeben
tz_wuerzburg
User
Beiträge: 22
Registriert: Dienstag 7. März 2017, 17:51

Re: Daten in einer mysql Tabelle sortieren

Beitragvon tz_wuerzburg » Montag 5. Februar 2018, 17:09

Jetzt hänge ich an der "weiteren Verarbeitung" meiner Wörterbuch Variable :(
Die Zuordnung scheint zu funktionieren, aber den Wert bekomme ich nicht einzeln. Wäre es nicht sowieso geschickter mit einem == zu arbeiten?
Funktioniert nur leider nicht.

Code: Alles auswählen

with open ("adressen_cz.csv","r") as input_lines_adress, open ("adressen_cz_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 in pal_gebiete:         #Hier scheint er direkt den Schlüsselwert als Vegleich zu benutzen
            print (postal_code + str(pal_gebiete))   # Aber wie bekomme ich hier den jeweiligen Wert ausgegeben?
        else:
            print ("PLZ_FALSCH")
Benutzeravatar
__deets__
User
Beiträge: 2155
Registriert: Mittwoch 14. Oktober 2015, 14:29

Re: Daten in einer mysql Tabelle sortieren

Beitragvon __deets__ » Montag 5. Februar 2018, 17:58

Programmieren ist nicht raten. Hast du dir mal angeschaut, was das offizielle Python Tutorial zum Umgang mit Woerterbuechern erzaehlt?

https://docs.python.org/3/tutorial/data ... ctionaries

Da steht uA, wie du das loest.
tz_wuerzburg
User
Beiträge: 22
Registriert: Dienstag 7. März 2017, 17:51

Re: Daten in einer mysql Tabelle sortieren

Beitragvon tz_wuerzburg » Mittwoch 7. Februar 2018, 20:44

Leute, ich komme einfach nicht weiter...
@deets. Danke für deinen Hinweis, nein, das hatte ich mir noch nicht angeschaut. Ich mache gerade einen Onlinekurs, hier wurde meine
Fragestellung aber noch nicht Thematisiert. Ich greife dem ganzen vor, da ich es für mich am interessantesten finde nebenbei ein Projekt
zu bearbeiten "das mir auch wirklich was bringt". Ein praktisches Beispiel sozusagen.

Die Funktionen zip() und items() habe ich mir angesehen. Sehr spannend, aber so wie ich das sehe benötige ich dann eine zweite Schleife. Ich glaube nicht, dass dies sinnvoll ist.

Jetzt habe ich den Code wie unten zu sehen umgeschrieben. Was mich sehr wundert ist, dass der Operator == zwischen postal_code und pal_gebiete
kein Ergebnis bringt. Mit dem in Operator finde ich den passenden Schlüssel, aber der Wert steht in der Ausgabe auf None.

Es wäre toll, wenn ihr mir noch einen Tipp geben könntet. Vielen Dank schonmal!

Code: Alles auswählen

pal_gebiete = {'10000': 'TEXT 1', '25000': 'TEXT 2', '30000': 'TEXT 3'}
with open ("adressen.csv","r") as input_lines_adress, open ("adressen_cz_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 in pal_gebiete:
            print (postal_code, pal_gebiete.get(values))
        else:
            print (postal_code, "PLZ_FALSCH")

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder