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?

  • Lesen von csv mit separator in python dask
  • Erstellen Sie das kartesische Produkt (cross join) von zwei csv-Dateien in Python
  • Schreiben Sie eine CSV ohne Trennzeichen in Python
  • Wie bekomme ich Spaltennamen beginnend mit einem Minus bei der Verwendung von numpy.genfromtxt?
  • Datum Umwandlung in pandas csv Leser
  • Linienmuster entfernen
  • Verwenden von Python, um eine sqlite-Datenbank aus mehreren csv-Dateien zu erstellen
  • Konvertieren Sie ausgewählte Spalten in csv in Wörterbuch
  • Python xlrd parse Excel xlsx zu csv mit Datumskonvertierung
  • Wie kann ich eine csv-Datei mit mehreren Kopfzeilen mit pandas to_csv () schreiben?
  • Wie kann ich eine große Datei csv-Datei (7GB) in Python aufteilen
  • Python ist die beste Programmiersprache der Welt.