2016-05-12 4 views
0

Eingang 2 csv DateienVergleich einiger Spalten von 2 csv-Dateien mit Python

EID MolIdx TEStart TEEnd TE TZone TBulkBE TBulkAE MC JT zavg vabs vzavg xyd.x xyd.y xydist nnbw vabsprev midhb 
0 370 36700 36800 110 20 36150 37090 0 0 -8.25705 0.219113 -0.000800014 20.8926 41.4347 5.75852 0 4.13067 0 
1 423 17950 18150 210 180 17400 18430 1 0 -4.26426 0.586578 -0.053 77.22 85.2104 22.0534 0 3.551 0 
2 468 41790 42020 240 50 41360 42380 0 0 7.82681 0.181248 -0.00269566 90.0646 92.7698 5.0841 0 4.19304 0 

und

EID MolIdx TEStart TEEnd TE TZone TBulkBE TBulkAE MC JT zavg vabs vzavg xyd.x xyd.y xydist nnbw vabsprev midhb 
0 370 36700 36800 110 20 36150 37090 0 0 -0.846655 0.0218695 2.59898e-05 2.0724 4.1259 0.583259 10 0.412513 0 
1 423 17950 18150 210 180 17400 18780 1 0 -0.453311 0.058732 -0.00526783 7.7403 8.52544 2.19627 0 0.354126 0 
2 468 41790 42020 240 70 41360 42380 0 0 0.743716 0.0181613 -0.000256186 9.08777 9.21395 0.502506 0 0.419265 0 

Ich muß Spalten vergleichen MC und JT von file1 mit diesen Spalten von file2

Wunschausgabe:

Number_of_strings 

Drucken Strings, wobei Werte unterschiedlich sind

import csv 

old = csv.reader(open('old.csv', 'rb'), delimiter=',') 
row1 = old.next() 
new = csv.reader(open('new.csv', 'rb'), delimiter=',') 
row2 = new.next() 

if (row1[8] == row2[8]) and (row1[9] == row2[9]): 
    continue 
else: 
    print row1[0] + ':' + row1[8] + '!=' + row2[8] 

Aber es Arbeit für mich does't

+0

Sie sind nicht über alle Zeilen Looping, wie Sie die 'next'method auf jeden csv-Leser Instanz * nur einmal sind anrufen *. Sie verpassen ein Schleifenkonstrukt. Abgesehen davon ist es überhaupt nicht klar, ob die Zeilen den gleichen Zeilen (d. H. Zeilennummern) in der anderen Datei entsprechen sollen. Kann vielleicht die 3. Zeile in der ersten Datei mit der 2. Zeile in der letzten Datei übereinstimmen? Bitte erweitern Sie Ihre Frage mit einer klareren Beschreibung der gewünschten Ausgabe. –

+0

Wie werden Ihre Dateien tatsächlich abgegrenzt? Auch 'if row1 [8]! = Row2 [8]) oder row1 [9]! = Row2 [9]: print (row1 [0] + ':' + row1 [8] + '! =' + Row2 [8 ]) 'wird Ihre aktuelle Logik ersetzen –

+0

Ich lag falsch. Das Delimeter ist '''' –

Antwort

1
  • Begrenzer ist statt ,
  • Sie eine for Schleife zu verwenden, vergessen zu Iterieren über den Rest der Dateien:

Code:

import csv 

old = csv.reader(open('old.csv', 'rb'), delimiter=' ') 
row1 = old.next() 
new = csv.reader(open('new.csv', 'rb'), delimiter=' ') 
row2 = new.next() 

for row1, row2 in zip(old, new): 
    if (row1[8] == row2[8]) and (row1[9] == row2[9]): 
     continue 
    else: 
     print row1[0] + ':' + row1[8] + '!=' + row2[8] 
+0

Es gibt die Anzahl der Strings zurück, aber nach einer bestimmten Zeichenkette wird 'IndexError: list index out of range' ausgegeben. –

+0

Und ich vergleiche 'JT' und' MC'. Kann ich 'output'' 2: JT', ich meine, dass in 2-String 'JT von file1! = JT von file2' print es –

+0

der IndexError ist wahrscheinlich, weil einige Zeilen weniger als 10 Spalten enthalten, können Sie einen Scheck hinzufügen um diese Zeilen zu überspringen. Ich verstehe nicht, was Sie mit Ausgabe "2: JT" obwohl – Fabricator

Verwandte Themen