Mi programa necesita leer archivos csv que pueden tener 1,2 o 3 columnas, y debe modificar su comportamiento en consecuencia. ¿Hay una manera simple de verificar el número de columnas sin "consumir" una fila antes de que se ejecute el iterador? El siguiente código es el más elegante que pude, pero yo preferiría correr el cheque antes de que el bucle comienza:Buscar número de columnas en el archivo csv
import csv
f = 'testfile.csv'
d = '\t'
reader = csv.reader(f,delimiter=d)
for row in reader:
if reader.line_num == 1: fields = len(row)
if len(row) != fields:
raise CSVError("Number of fields should be %s: %s" % (fields,str(row)))
if fields == 1:
pass
elif fields == 2:
pass
elif fields == 3:
pass
else:
raise CSVError("Too many columns in input file.")
Editar: debería haber incluido más información sobre mis datos. Si solo hay un campo, debe contener un nombre en notación científica. Si hay dos campos, el primero debe contener un nombre y el segundo un código de enlace. Si hay tres campos, el campo adicional contiene un indicador que especifica si el nombre es actualmente válido. Por lo tanto, si una fila tiene 1, 2 o 3 columnas, todas deben tener lo mismo.
mejor uso fields' 'en lugar de' rows' . –
@MarcodeWit gracias, debería ser, por supuesto, 'fields' También estoy de acuerdo con su punto de que no todas las filas necesariamente tienen el mismo número de campos. En este caso, he decidido que debería generar una excepción si se encuentra una fila. – rudivonstaden