Vergleiche zwei CSV-Dateien und Unterschied machen

Ich habe zwei csv datei Ich muss vergleichen und dann spucken die differnces:

CSV FORMAT:

Name Produce Number Adam Apple 5 Tom Orange 4 Adam Orange 11 

Ich muss die beiden csv-Dateien vergleichen und dann sagen, wenn es einen Unterschied zwischen Adams Äpfel auf Blatt und Blatt 2 und tun, dass für alle Namen und produzieren Zahlen. Beide CSV-Dateien werden gleich geschrieben.

Alle Zeiger werden sehr geschätzt

6 Solutions collect form web for “Vergleiche zwei CSV-Dateien und Unterschied machen”

Wenn deine CSV-Dateien nicht so groß sind, bringen sie deine Maschine auf die Knie, wenn du sie in den Speicher ladest, dann könntest du so etwas ausprobieren:

 import csv csv1 = list(csv.DictReader(open('file1.csv'))) csv2 = list(csv.DictReader(open('file2.csv'))) set1 = set(csv1) set2 = set(csv2) print set1 - set2 # in 1, not in 2 print set2 - set1 # in 2, not in 1 print set1 & set2 # in both 

Für große Dateien können Sie sie in eine SQLite3-Datenbank laden und SQL-Abfragen verwenden, um das gleiche zu tun oder nach relevanten Schlüsseln zu sortieren und dann einen Match-Merge zu machen.

Ich habe csvdiff benutzt

 $pip install csvdiff $csvdiff --style=compact col1 a.csv b.csv 

Link zum Paket auf Pypi

Ich fand diesen Link nützlich

Eines der besten Dienstprogramme für den Vergleich von zwei verschiedenen Dateien ist diff .

Siehe Python-Implementierung hier: Vergleich von zwei .txt-Dateien mit difflib in Python

 import csv def load_csv_to_dict(fname, get_key, get_data): with open(fname, 'rb') as inf: incsv = csv.reader(inf) incsv.next() # skip header return {get_key(row):get_data(row) for row in incsv} def main(): key = lambda r: tuple(r[0:2]) data = lambda r: int(r[2]) f1 = load_csv_to_dict('file1.csv', key, data) f2 = load_csv_to_dict('file2.csv', key, data) f1keys = set(f1.iterkeys()) f2keys = set(f2.iterkeys()) print("Keys in file1 but not file2:") print(", ".join(str(a)+":"+str(b) for a,b in (f1keys-f2keys))) print("Keys in file2 but not file1:") print(", ".join(str(a)+":"+str(b) for a,b in (f2keys-f1keys))) print("Differing values:") for k in (f1keys & f2keys): a,b = f1[k], f2[k] if a != b: print("{}:{} {} <> {}".format(k[0],k[1], a, b)) if __name__=="__main__": main() 

Wenn du das csv-Modul von Python zusammen mit einem Funktionsgenerator verwenden möchtest, kannst du verschachtelte Looping verwenden und große .csv-Dateien vergleichen. Das folgende Beispiel vergleicht jede Zeile mit einem flüchtigen Vergleich:

 import csv def csv_lazy_get(csvfile): with open(csvfile) as f: r = csv.reader(f) for row in r: yield row def csv_cmp_lazy(csvfile1, csvfile2): gen_2 = csv_lazy_get(csvfile2) for row_1 in csv_lazy_get(csvfile1): row_2 = gen_2.next() print("row_1: ", row_1) print("row_2: ", row_2) if row_2 == row_1: print("row_1 is equal to row_2.") else: print("row_1 is not equal to row_2.") gen_2.close() 

Hier ist ein Start, der keinen difflib . Es ist wirklich nur ein Punkt zu bauen, weil vielleicht Adam und Äpfel zweimal auf dem Blatt erscheinen; Können Sie sicherstellen, dass das nicht der Fall ist? Sollten die Äpfel summiert werden, oder ist das ein Fehler?

 import csv fsock = open('sheet.csv','rU') rdr = csv.reader(fsock) sheet1 = {} for row in rdr: name, produce, amount = row sheet1[(name, produce)] = int(amount) # always an integer? fsock.close() # repeat the above for the second sheet, then compare 

Du hast die Idee?

  • Python pandas nicht lesen erste spalte aus csv datei
  • Lese spezifische Zeile in csv-Datei, python
  • Konvertieren von CSV-Dateien in TF-Aufzeichnungen
  • Um zwei Spalten in einer csv-Datei zusammenzuführen
  • Pandas - pandas.DataFrame.from_csv vs pandas.read_csv
  • TypeError: 'generator' Objekt ist nicht abonnierbar, CSV-Datei
  • Python CSV Leser, um 9 Header zu überspringen
  • Konvertieren mehrerer tabulatorgetrennter .txt-Dateien in mehrere .xls-Dateien
  • Erhalten Sie die Datei erstellt Datum - Hinzufügen zu Dataframes Spalte auf read_csv
  • Lesen Sie bestimmte Spalten mit Pandas oder einem anderen Pythonmodul
  • Öffnen Sie einen Dateinamen + Datum als csv in Python
  • Python ist die beste Programmiersprache der Welt.