私のプログラムは、1、2、または3列のcsvファイルを読み取る必要があり、それに応じて動作を変更する必要があります。イテレータが実行される前に行を「消費」せずに列数をチェックする簡単な方法はありますか?次のコードは、私が管理できる最も洗練されたコードですが、forループが開始する前にチェックを実行することをお勧めします。
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.")
編集:データに関する詳細情報を含める必要がありました。フィールドが1つしかない場合は、科学的記数法で名前を含める必要があります。2つのフィールドがある場合、最初のフィールドには名前が含まれ、2番目のフィールドにはリンクコードが含まれている必要があります。3つのフィールドがある場合、追加のフィールドには、名前が現在有効かどうかを指定するフラグが含まれています。したがって、いずれかの行に1、2、または3列がある場合、すべてが同じである必要があります。