Python programm zu csv dateien funktioniert nicht?
Ich habe Code für ein python programm welches von 2 csv files pfade als input fragt, und diese dann prüft auf die ersten 2 spalten jeder reihe ob die 2 übereinstimmen. wenn dies so ist, soll die ganze spalte welche übereinstimmt von csv2 auf csv1 kopiert werden, das aber nur für die spalte die einstimmt
import os
import csv
def get_file_path(prompt):
while True:
file_path = input(prompt)
if os.path.isfile(file_path):
return file_path
else:
print("Fehler: Die angegebene Datei existiert nicht. Bitte geben Sie einen gültigen Pfad ein.")
def compare_csv_files():
file1_path = get_file_path("Geben Sie den Pfad zur ersten CSV-Datei ein: ")
file2_path = get_file_path("Geben Sie den Pfad zur zweiten CSV-Datei ein: ")
with open(file1_path, newline='') as file1, open(file2_path, newline='') as file2:
reader1 = csv.reader(file1)
reader2 = csv.reader(file2)
header1 = next(reader1)
header2 = next(reader2)
if header1[:2] != header2[:2]:
print("Fehler: Die ersten beiden Spalten der CSV-Dateien stimmen nicht überein.")
return
rows1 = [row for row in reader1]
rows2 = [row for row in reader2]
output_rows = []
for row1 in rows1:
for row2 in rows2:
if row1[:2] == row2[:2]:
output_rows.append(row2)
break
if len(output_rows) == 0:
print("Es wurden keine übereinstimmenden Zeilen gefunden.")
return
output_path = input("Geben Sie den Pfad zur Ausgabedatei ein: ")
with open(output_path, 'w', newline='') as output_file:
writer = csv.writer(output_file)
writer.writerow(header1)
for row in output_rows:
writer.writerow(row)
input("Drücken Sie die Eingabetaste, um das Programm zu beenden.")
Dieser Code fragt nach den Pfaden zu den beiden CSV-Dateien und prüft, ob die Dateien existieren. Wenn eine Datei nicht gefunden wird, wird eine Fehlermeldung ausgegeben und der Benutzer wird auf
2 Antworten
Nur als wohlgemeinter Rat:
Wenn Du Übereinstimmungen finden willst und die Konstruktion eines karthesischen Produktes vermeiden willst, dann hashe (Stichwort dict) eine der Dateien, um dann mit Lookups auf dem Hash den Abgleich zu machen. (Vorzugsweise das kleinere Set)
Ferner:
rows1 = [row for row in reader1]
rows2 = [row for row in reader2]
Du mußt keine Listen der ganzen CSVs instanziieren, wenn Du über die Einträge iterieren willst, das geht auch direkt, also:
for row1 in reader1:
Und wie bereits angemerkt wurde, solltest Du Deien Funktionen vielleicht auch noch aufrufen.
Du rufst die compare_csv_files-Funktion nicht auf.