Mon programme a besoin de lire les fichiers csv qui peuvent avoir 1,2 ou 3 colonnes, et il doit modifier son comportement en conséquence. Existe-t-il un moyen simple de vérifier le nombre de colonnes sans "consommer" une ligne avant l'exécution de l'itérateur? Le code suivant est le plus élégant que je pouvais gérer, mais je préférerais courir le chèque avant que la boucle commence:Trouver le nombre de colonnes dans le fichier 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.")
Edit: j'ai inclus plus d'informations sur mes données. S'il n'y a qu'un seul champ, il doit contenir un nom en notation scientifique. S'il y a deux champs, le premier doit contenir un nom et le second un code de liaison. S'il existe trois champs, le champ supplémentaire contient un indicateur qui spécifie si le nom est actuellement valide. Donc si une ligne a 1, 2 ou 3 colonnes, toutes doivent avoir la même chose.
mieux utiliser 'fields' au lieu de' rows' . –
@MarcodeWit merci, il devrait bien sûr être 'fields'! Je suis également d'accord avec votre point de vue que toutes les lignes n'ont pas nécessairement le même nombre de champs. Dans ce cas, j'ai décidé qu'il devrait déclencher une exception si une telle ligne est rencontrée. – rudivonstaden