1

私の目的では、実際に行を操作する前に、(CSV)ファイルの行数を知る必要があります。私はグーグルで検索しましたが、ドキュメントには2回イテレータ(CSV.reader)を作成する必要があると記載されています(1回目はカウント用、2回目は行の操作用)。これが唯一の方法ですか、それともトリックを行うためのトリッキーな方法がありますか?

回答ありがとうございます。

4

2 に答える 2

1

ファイルを読まない方法はわかりませんが、ボトルネックがどこにあるかに応じて、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つのループを使用するのが最善の策です。

于 2012-11-07T08:48:43.747 に答える
1

ファイルが試してみることができるほど大きくない場合:

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
于 2012-11-07T08:52:10.263 に答える