私の目的では、実際に行を操作する前に、(CSV)ファイルの行数を知る必要があります。私はグーグルで検索しましたが、ドキュメントには2回イテレータ(CSV.reader)を作成する必要があると記載されています(1回目はカウント用、2回目は行の操作用)。これが唯一の方法ですか、それともトリックを行うためのトリッキーな方法がありますか?
回答ありがとうございます。
ファイルを読まない方法はわかりませんが、ボトルネックがどこにあるかに応じて、N行を処理するだけで済みます。さらにある場合は、次のように破棄します。
count = 0
for line in reader:
count += 1
if count > N: # Over the limit so stop processing
break
else:
processed_data += process(line)
else:
# This block only runs if the loop completed naturally, i.e. count <= N
return processed_data
費用がかかる場合process(line)
は、質問で説明されているように2つのループを使用するのが最善の策です。
ファイルが試してみることができるほど大きくない場合:
from csv import reader
def proceed(size):
with open(filename) as f:
data = list(csv.reader(f))
if len(data) > size:
return
else:
for line in data:
#do action
weights = {'user1': 4, 'user2': 5}
for k,v in weights.iteritems():
proceed(v)
または、非常に大きなファイルがある場合に備えて、@georgeslによって提案されたように:
def proceed(size):
if sum(1 for row in csv.reader(open(filename))) > size:
return
else:
for line in csv.reader(open(filename)):
#do action