Daten in einer mysql Tabelle sortieren

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
tz_wuerzburg
User
Beiträge: 71
Registriert: Dienstag 7. März 2017, 17:51

@Sirius3: Ich bekomme es nicht gebacken.
Als erstes bekomme ich das hier nicht mit .append verknüpft.

Code: Alles auswählen

area_code_output_ok = address_line + area_code_output
Ergebnis ist dann einmal komplett "None".

Zweitens finde ich keine Lösung für das schreiben in zwei Files außerhalb der Schleife.
Gebe ich "database_error" außerhalb aus, bekomme ich über die komplette Datei solange den
fehlerhaften Datensatz bis der nächste fehlerhafte Datensatz gefunden wird, usw.

Wo finde ich dazu vielleicht ein gutes Handbuch?

Vielen Dank!

Code: Alles auswählen

# -*- coding: utf-8 -*-
import csv

pal_gebiete = {}
with open("anreicherung_utf8.csv", "r", encoding="utf-8") as entry_pal:
    line_pal = csv.reader(entry_pal, delimiter=";")
    for line in line_pal:
        pal_gebiete[line[0]] = line[1:]


database_error = []
area_code_output = []
area_code_output_ok = []

with open("adressen.csv", "r", encoding="utf-8") as input, open("zip_ok.csv", "w", newline="", encoding="utf-8") as output_ok, open(
        "zip_error.csv", "w", newline="", encoding="utf-8") as output_error:
    entry_address = csv.reader(input, delimiter=";")
    for address_line in entry_address:
        postal_code = address_line[1]

        if postal_code in pal_gebiete:
            area_code_output = pal_gebiete[postal_code]
            area_code_output_ok = address_line + area_code_output

            database_output_ok = csv.writer(output_ok, delimiter=";")
            database_output_ok.writerow(area_code_output_ok)

        else:
            database_error = address_line

            database_output_error = csv.writer(output_error, delimiter=";")
            database_output_error.writerow(database_error)

        print(area_code_output_ok)
Sirius3
User
Beiträge: 17712
Registriert: Sonntag 21. Oktober 2012, 17:20

@tz_wuerzburg: append hat kein Ergebnis, weil es die Liste ändert. Und wenn Du bei jedem Datensatz `database_error` in eine Datei schreibst, ist die für jeden Datensatz geschrieben. In jedem Schleifendurchgang einen csv-Writer zu erzeugen ist trotzdem immer noch falsch.
tz_wuerzburg
User
Beiträge: 71
Registriert: Dienstag 7. März 2017, 17:51

@Sirius3. Habe nun verstanden. Der csv.writer ist nun nicht mehr in der Schleife und die Daten
werden sauber geschrieben. Danke!

Code: Alles auswählen

# -*- coding: utf-8 -*-
import csv

pal_gebiete = {}
with open("anreicherung_utf8.csv", "r", encoding="utf-8") as entry_pal:
    line_pal = csv.reader(entry_pal, delimiter=";")
    for line in line_pal:
        pal_gebiete[line[0]] = line[1:]


database_error = []
area_code_output = []
area_code_output_ok = []

with open("adressen.csv", "r", encoding="utf-8") as input, open("zip_ok.csv", "w", newline="", encoding="utf-8") as output_ok, open(
        "zip_error.csv", "w", newline="", encoding="utf-8") as output_error:
    entry_address = csv.reader(input, delimiter=";")
    database_output_ok = csv.writer(output_ok, delimiter=";")
    database_output_error = csv.writer(output_error, delimiter=";")
    for address_line in entry_address:
        postal_code = address_line[1]

        if postal_code in pal_gebiete:
            area_code_output = pal_gebiete[postal_code]
            area_code_output_ok = address_line + area_code_output
            database_output_ok.writerow(area_code_output_ok)

        else:
            database_output_error.writerow(address_line)
Sirius3
User
Beiträge: 17712
Registriert: Sonntag 21. Oktober 2012, 17:20

@tz_wuerzburg: keine der drei Listen, die Du vor dem `with` erzeugst, wird jemals benutzt. Die Zeilen können ersatzlos gelöscht werden.
Antworten