Seite 1 von 1

Kann das Ergebnis der IF Abfrage nicht speichern

Verfasst: Sonntag 20. Dezember 2020, 13:04
von ossi047
Das ist die Daten csvcodesfile:
15001; 100
16001; 101
18001; 102
60613; 103
60624; 104
98002; 105
ALA77; 106
ALA77R; 107
3230000000000; 108

with open('C:/users/PycharmProjects/testordner/CodeszumSuchenTest.csv', 'r', encoding="cp850") as csvcodesfile:
csvleser1 = csv.reader(csvcodesfile, delimiter=';') # für CodeszumSuchen - csvleser1
zeile = csvleser1 # codeszumsuchen
print("Zeile 1")
for row in zeile: # codeszumsuchen
with open('C:/users/PycharmProjects/testordner/dataklein.csv', 'r', encoding="cp850") as csvdatafile:
csvleser2 = csv.reader(csvdatafile, delimiter=';') # für datanorm
zeile2 = csvleser2 # datanorm
with open('C:/users/MELACH/PycharmProjects/testordner/dataselek.csv', 'w', newline='') as daten:
writer = csv.writer(daten, delimiter=';')
for elem in zeile2: # datanorm
if elem[0] == 'A' and (elem[2] == row[0]): #selektieren nur der A-Sätze
print("Das ist die elem", elem)
writer.writerow(elem)

Das Print Ergebnis nach Start des Programmes:
Das ist die elem ['A', 'N', '15001', '00', 'Test Artikel', '48cm, Mauerwerksbau', '1', '0', 'ST', '1445', '572Z', '134', ' ', '']
Das ist die elem ['A', 'N', '16001', ....
Das ist die elem ['A', 'N', '18001',....
Das ist die elem ['A', 'N', '60613',....
Das ist die elem ['A', 'N', '60624', ....
Das ist die elem ['A', 'N', '98002',....
Das ist die elem ['A', 'N', '3230000000000', '00', ......

Das Ergebnis ist auch in Ordnung nur wird immer nur die LETZTE Zeile in die Datei dataselek.csv gespeichert,
und ich komm nicht drauf warum. Würde gerne alle angedruckten Zeile in eine Datei speichern.

Datei dataselek.csv:
A;N;3230000000000;00;Zwanzigster Testartikel;FT Leerverrohrung 4 Fach;1;0;ST;5431;296Z;134; ;

Könnt Ihr mir da bitte Helfen. Danke im Vorraus

Re: Kann das Ergebnis der IF Abfrage nicht speichern

Verfasst: Sonntag 20. Dezember 2020, 13:44
von __blackjack__
@ossi047: Du überschreibst die Datei mit jedem gefundenen Ergebnis. Öffne die Ergebnisdatei *einmal* zum Schreiben und nicht für jede Zeile aus der ersten Eingabedatei.

Die Namen sind übrigens besch…eiden. Nummeriere keine Namen und so etwas wie ``for row in zeile:`` ist ja sowas von offensichtlich falsch und unsinnig benannt…

Pfade/Pfadteile sollten nicht mehrfach im Quelltext wiederholt werden.

Re: Kann das Ergebnis der IF Abfrage nicht speichern

Verfasst: Sonntag 20. Dezember 2020, 16:55
von ossi047
Danke für die schnelle Antwort. ""Öffne die Ergebnisdatei *einmal* zum Schreiben und nicht für jede Zeile aus der ersten Eingabedatei."" Für diese Antwort würde
ich noch Hilfe brauchen "In welcher Zeile soll genau der Code für das schreiben hinkommen"? Könnte ich da ein kurzes Beispiel bekommen?

Der Ordnung halber möchte ich noch erwähnen, dass es sich hier um eine Testdatei handelt. Wenn das funktioniert wird die Datei dann in das Hauptprogramm natürlich mit den Empfehlungen von Dir eingebaut.

with open('C:/users/PycharmProjects/testordner/CodeszumSuchenTest.csv', 'r', encoding="cp850") as csvcodesfile:
csvleser1 = csv.reader(csvcodesfile, delimiter=';') # für CodeszumSuchen - csvleser1
zeile = csvleser1 # codeszumsuchen
print("Zeile 1")
for row in zeile: # codeszumsuchen
with open('C:/users/PycharmProjects/testordner/dataklein.csv', 'r', encoding="cp850") as csvdatafile:
csvleser2 = csv.reader(csvdatafile, delimiter=';') # für datanorm
zeile2 = csvleser2 # datanorm
for elem in zeile2: # datanorm
if elem[0] == 'A' and (elem[2] == row[0]): #selektieren nur der A-Sätze
print("Das ist die elem", elem)

Wo soll das Speichern der Abfrage: if elem[0] == 'A' and (elem[2] == row[0]): #selektieren nur der A-Sätze hinkommen mit Nummern aus csvcodesfile?

Abfrage Speichern:
with open('C:/users/PycharmProjects/testordner/dataselek.csv', 'w', newline='') as daten:
writer = csv.writer(daten, delimiter=';')
writer.writerow(elem)

Re: Kann das Ergebnis der IF Abfrage nicht speichern

Verfasst: Sonntag 20. Dezember 2020, 17:30
von Sirius3
Eingerückt wird immer mit 4 Leerzeichen pro Ebene, 8 sind einfach zu viele.
Warum nennst Du Deinen csvleser1 in zeile um, bzw. warum benutzt Du nicht gleich zeile, bzw. eigentlich zeilen, weil das sind ja mehrere?
Für jeden Eintrag der ersten csv-Datei immer die gesamte zweite zu lesen ist ziemliche Verschwendung. Lies doch die Datei einmal in eine passende Datenstruktur.

Code: Alles auswählen

DATAKLEIN = 'C:/users/PycharmProjects/testordner/dataklein.csv'
DATASELECT = 'C:/users/MELACH/PycharmProjects/testordner/dataselek.csv'
DATACODES = 'C:/users/PycharmProjects/testordner/CodeszumSuchenTest.csv'

datanorm = {}
with open(DATAKLEIN, encoding="cp850", newline="") as csvdatafile:
    zeilen = csv.reader(csvdatafile, delimiter=';')
    for element in zeilen:
        if element[0] == 'A':
            #selektieren nur der A-Sätze
            datanorm[element[2]] = element

with open(DATASELECT, 'w', newline='') as daten:
    writer = csv.writer(daten, delimiter=';')
    with open(DATACODES, encoding="cp850", newline="") as csvcodesfile:
        zeilen = csv.reader(csvcodesfile, delimiter=';')
        for element in zeilen:
            if element[0] in datanorm:
                writer.writerow(datanorm[element[0]])

Re: Kann das Ergebnis der IF Abfrage nicht speichern

Verfasst: Sonntag 20. Dezember 2020, 17:52
von ossi047
Das funktioniert einwandfrei!!!! Nochmals vielen vielen Dank für den Beispielcode Sirius 3. Da wäre ich NIE draufgekommen.