Seite 1 von 1

2 CSV Datei - gleiche und verschiedene Daten exportieren

Verfasst: Donnerstag 14. September 2017, 10:31
von Peer
Hallo,
ich bin neu in Python und möchte 2 CSV Datein vergleichen und in jeweils einer extra Datei die gleichen Datensätze und die unterschiedlichen Datensätze exportieren und speichern
Nur leider speichert der die Listen immer 1:1 (also es wird nichts verglichen) hab schon 2x verschiedene Logis versucht.

Test1.csv =
test;test1;test2;test3;test4
test0;test01

Test2.csv =
test5;test6;test7;test8;test4
test9;test10;test11

Am Ende will ich eine Liste mit Test4 und eine Liste mit den restlichen Test haben

Code: Alles auswählen

import csv

output_path1 = "server_fertig1.csv" #1 Logikversuch
output_path2 = "server_fertig2.csv" #1 Logikversuch
output_path3 = "server_fertig3.csv" #2 Logikversuch
output_path4 = "server_fertig4.csv" #2 Logikversuch

f1 = open("test1.csv") #File Nr1 einlesen
oldFile1 = csv.reader(f1, delimiter=';')
oldList1 = list(oldFile1)

f2 = open("test2.csv") #File Nr2 einlesen
oldFile2 = csv.reader(f2, delimiter=';')
oldList2 = list(oldFile2)

f1.close() #File Nr1 schließen
f2.close() #File Nr2 schließen

#1 Logikversuch
output1 = [row for row in oldList1 if row not in oldList2]
output2 = [row for row in oldList1 if row in oldList2]

#verschiedene Daten
with open(output_path1,'w', newline='') as fout1:
    writer = csv.writer(fout1, delimiter=';')
    writer.writerows(output1)
#gleiche Daten
with open(output_path2, 'w', newline='') as fout2:
    writer = csv.writer(fout2, delimiter=';')
    writer.writerows(output2)
    
       

#2 Logikversuch
output3 = set([tuple(item) for item in oldList1])
output4 = set([tuple(item) for item in oldList2])

with open(output_path3, 'w', newline='') as fout3:
    writer = csv.writer(fout3, delimiter=';')
    writer.writerows(output3) 
with open(output_path4, 'w', newline='') as fout4:
    writer = csv.writer(fout4, delimiter=';')
    writer.writerows(output4)

print (output1)
print (output2)
print (output3)
print (output4)
[['test', 'test1', 'test2', 'test3', 'test4'], ['test0', 'test01']]
[]
{('test', 'test1', 'test2', 'test3', 'test4'), ('test0', 'test01')}
{('test9', 'test10', 'test11'), ('test5', 'test6', 'test7', 'test8', 'test4')}

Process finished with exit code 0

Re: 2 CSV Datei - gleiche und verschiedene Daten exportieren

Verfasst: Donnerstag 14. September 2017, 11:56
von Sirius3
@Peer: die Dateien sind doch verschieden, so dass alles in der ersten Liste landet und nichts in der zweiten. Was erwartest Du denn für ein Ergebnis?

Re: 2 CSV Datei - gleiche und verschiedene Daten exportieren

Verfasst: Donnerstag 14. September 2017, 12:03
von Peer
Die sollen auch verschieden sein bis auf "Test4" das soll als einziges in eine andere Datei


Das Ergebnis möchte ich haben - also am Ende 4 Listen statt 2

Datei1
Test1; Test2;Test3
Datei2
Test1;Test4;Test5

Export1 (sind in Datei1 & Datei 2)
Test1

Export2 (sind in Datei1 oder Datei 2)
Test2;Test3;Test4;Test5;

Export3(sind nur in Datei1)
Test2;Test3

Export4 (sind nur in Datei2)
Test4;Test5

Re: 2 CSV Datei - gleiche und verschiedene Daten exportieren

Verfasst: Donnerstag 14. September 2017, 12:37
von Peer

Code: Alles auswählen

import csv

output_path1 = "server_fertig1.csv" # Export 1 (Liste 1 UND Liste 2)
output_path2 = "server_fertig2.csv" # Export 2 (NUR Liste 1)

#File Nr1 einlesen
f1 = open("test1.csv")
oldFile1 = csv.reader(f1, delimiter=';')
oldList1 = list(oldFile1)

#File Nr2 einlesen
f2 = open("test2.csv")
oldFile2 = csv.reader(f2, delimiter=';')
oldList2 = list(oldFile2)

#Files Nr1 + Nr2 schließen
f1.close()
f2.close()

#1 Logikversuch
output1 = []
output2 = []
for row in oldList1:
    if row not in oldList2:
        output2.append(row)
    else:
        output1.append(row)


# Export 1 (Liste 1 UND Liste 2)
with open(output_path1,'w', newline='') as fout1:
    writer = csv.writer(fout1, delimiter=';')
    writer.writerows(output1)

# Export 2 (NUR Liste 1)
with open(output_path2, 'w', newline='') as fout2:
    writer = csv.writer(fout2, delimiter=';')
    writer.writerows(output2)

# Feedback
print (output1)
print (output2)

Re: 2 CSV Datei - gleiche und verschiedene Daten exportieren

Verfasst: Donnerstag 14. September 2017, 14:06
von Sirius3
@Peer: Du willst also keinen zeilenweisen Vergleich, sondern einen zellenweisen? Aber dann pro Zeile oder pro Datei?

Re: 2 CSV Datei - gleiche und verschiedene Daten exportieren

Verfasst: Freitag 15. September 2017, 07:49
von Peer
Ich habe 2 Listen mit mehreren Zeilen und möchte die vergleichen also das ganze Dokument

Re: 2 CSV Datei - gleiche und verschiedene Daten exportieren

Verfasst: Freitag 15. September 2017, 09:19
von Sirius3
@Peer: ja schon klar, aber wie willst Du vergleichen? Was mit was genau?

Re: 2 CSV Datei - gleiche und verschiedene Daten exportieren

Verfasst: Freitag 15. September 2017, 10:04
von noisefloor
Hallo,

@Peer: Die Frage ist z.B., muss die Zeile _exakt_ identisch sein, oder gilt so was wie

Datei 1: foo,bar,spam,egg
Datei 2: foo,spam,egg,bar

auch als identisch?

Gruß, noisefloor

Re: 2 CSV Datei - gleiche und verschiedene Daten exportieren

Verfasst: Freitag 15. September 2017, 11:53
von Peer
noisefloor hat geschrieben: Datei 1: foo,bar,spam,egg
Datei 2: foo,spam,egg,bar

auch als identisch?
Das würde reichen -
Problem ist, dass ich 2 Listen mit mehreren Spalten habe und die in einigen Spalten gleich sind aber nicht überall
z.B
Produktname ist für jede Zeile gleich - Seriennummer aber nicht

Re: 2 CSV Datei - gleiche und verschiedene Daten exportieren

Verfasst: Freitag 15. September 2017, 12:14
von Sirius3
@Peer: wenn Du nicht in der Lage bist, eine klare Problembeschreibung anzugeben, wird man Dir nicht helfen können.

Re: 2 CSV Datei - gleiche und verschiedene Daten exportieren

Verfasst: Freitag 15. September 2017, 12:26
von Peer
Wo ist das ungenau ? Was brauchst du denn noch genauer ? :D

Re: 2 CSV Datei - gleiche und verschiedene Daten exportieren

Verfasst: Freitag 15. September 2017, 14:00
von Sirius3
Die einzige Aussage zu Deinem Problem war bisher:
ich [..] möchte 2 CSV Datein vergleichen und in jeweils einer extra Datei die gleichen Datensätze und die unterschiedlichen Datensätze exportieren und speichern
Die logische Interpretation ist, die Dateien Zeilenweise zu vergleichen und das hast Du mit dem ersten geposteten Code auch getan, Du warst aber mit dem Ergebnis nicht zufrieden. Seither versuche ich von Dir zu erfahren, warum Du mit Deinem ersten Ergebnis nicht zufrieden bist.

Zum Verständnis benötigt der Leser also eine klare Definition von Datensatz und von Gleichheit zweier Datensätze.

Re: 2 CSV Datei - gleiche und verschiedene Daten exportieren

Verfasst: Freitag 15. September 2017, 14:22
von noisefloor
Hallo,

das Problem ist, dass du _uns_ nicht eindeutig klar machen kannst, _was_ du willst. Erst heißt es zeilenweise, dann zeilenweise aber Reihenfolge egal, dann (anhand des Seriennummern-Beispiels) sind bestimmte Zellen scheinbar auch egal.

Wenn du ein Problem nicht erklären kannst, dann hast du zwei Probleme. Und ziemlich sicher wirst du so auch nicht eine Lösung hier im Forum bekommen.

Gruß, noisefloor