2011-01-15 20 views
5

decir que tengo dos archivos CSV (file1 y file2) con contenidos como se muestra a continuación:Python: Comparación de columnas específicas en dos archivos CSV

fichero1:

fred,43,Male,"23,45",blue,"1, bedrock avenue" 

fichero2:

fred,39,Male,"23,45",blue,"1, bedrock avenue" 

Me gustaría comparar estos dos registros CSV para ver si las columnas 0,2,3,4 y 5 son las mismas. No me importa la columna 1.

¿Cuál es la forma más pitónica de hacer esto?

EDIT:

sería apreciado un código de ejemplo.

Edit2:

Tenga en cuenta las comas incrustadas deben ser manejados correctamente.

+0

Sobre Edit2: sólo tiene que utilizar 'csv' importación y se le multa. – ulidtko

+0

@ulidtko Sí, lo agradezco. No quería ser prescriptivo en caso de que hubiera otra solución que no conocía. – coder999

Respuesta

8

Supongo que la mejor manera es usar la biblioteca de Python: http://docs.python.org/library/csv.html.

ACTUALIZACIÓN (ejemplo añadido):

import csv 
reader1 = csv.reader(open('data1.csv', 'rb'), delimiter=',', quotechar='"')) 
row1 = reader1.next() 
reader2 = csv.reader(open('data2.csv', 'rb'), delimiter=',', quotechar='"')) 
row2 = reader2.next() 
if (row1[0] == row2[0]) and (row1[2:] == row2[2:]): 
    print "eq" 
else: 
    print "different" 
+0

¿Podría dar un ejemplo, por favor? – coder999

+0

@ coder999, mira mi respuesta. – ulidtko

+0

@Elalfer Me gusta esto, pero no se compara col 0 lo hace? – coder999

1

me gustaría leer ambos registros, eliminar la columna 1 y la comparación de lo que queda. (En python3 funciona)

import csv 
file1 = csv.reader(open("file1.csv", "r")) 
file2 = csv.reader(open("file2.csv", "r")) 
r1 = next(file1) 
r1.pop(1) 
r2 = next(file2) 
r2.pop(1) 
return r1 == r2 
+1

Esto no funcionaría debido a las comas incrustadas en los valores – coder999

+0

Debería haber enviado otra respuesta en lugar de reescribir completamente esta. – ulidtko

+0

ahora que ha arreglado la coma, esto también se ve muy bien. – coder999

0
>>> import csv 
>>> csv1 = csv.reader(open("file1.csv", "r")) 
>>> csv2 = csv.reader(open("file2.csv", "r")) 
>>> while True: 
... try: 
...  line1 = csv1.next() 
...  line2 = csv2.next() 
...  equal = (line1[0]==line2[0] and line1[2]==line2[2] and line1[3]==line2[3] and line1[4]==line2[4] and line1[5]==line2[5]) 
...  print equal 
... except StopIteration: 
...  break 
True 
+0

Esto se ve bien. – coder999

+0

@ coder999 No estaba claro en su pregunta: ¿desea comparar CSV de una sola fila o CSV con varias filas? – ulidtko

+0

solo una fila está bien – coder999

Cuestiones relacionadas