6 列目がそのクラスの生徒数を表す CSV があります。また、別のスクリプトに表示される場合にクラスから一部の生徒を削除する別のコードもあります。各クラスの生徒数をどのように数え直しますか。以下のサンプルデータを参照してください。
Jan-20,Data,Class xpv,4,11yo+,4,more data....
Jan-20,Data,Class xpv,4,11yo+,4,more data....
Jan-20,Data,Class xpv,4,11yo+,4,more data....
Jan-20,Data,Class xpv,4,11yo+,4,more data....
Jan-30,Data,Class tn2,4,10yo+,12,more data....
Jan-30,Data,Class tn2,4,10yo+,12,more data....
Jan-30,Data,Class tn2,4,10yo+,12,more data....
Jan-30,Data,Class tn2,4,10yo+,12,more data....
Jan-30,Data,Class tn2,4,10yo+,12,more data....
Jan-30,Data,Class tn2,4,10yo+,12,more data....
Jan-30,Data,Class tn2,4,10yo+,12,more data....
Jan-30,Data,Class tn2,4,10yo+,12,more data....
Jan-30,Data,Class tn2,4,10yo+,12,more data....
Jan-30,Data,Class tn2,4,10yo+,12,more data....
Jan-30,Data,Class tn2,4,10yo+,12,more data....
Jan-30,Data,Class tn2,4,10yo+,12,more data....
Jan-50,Data,Class 22zn,2,10yo+,6,more data....
Jan-50,Data,Class 22zn,2,10yo+,6,more data....
Jan-50,Data,Class 22zn,2,10yo+,6,more data....
Jan-50,Data,Class 22zn,2,10yo+,6,more data....
Jan-50,Data,Class 22zn,2,10yo+,6,more data....
Jan-50,Data,Class 22zn,2,10yo+,6,more data....
どの行が削除されたかを識別する列は「詳細データ」にありますが、1 つの行が削除されると、そのクラスに残っている生徒の数を数え、基本的に列 2 を数え、列 6 の値を置き換えるようにコード化する方法を教えてください。 (これらのクラス名はすべて一意です)
これが理にかなっていることを願っています。どんな助けでもありがたく受け取られます!よろしくお願いしますAEA
編集 上記のデータを AEAtest.csv として保存
次のコードを実行してみました。
import csv
import itertools
from operator import itemgetter
import random
def some_condition(line):
return random.random() < 0.5 # delete lines randomly with 50% probability
def filter_data(data):
for classname, group in itertools.groupby(data, itemgetter(2)):
filtered_group = [line for line in group if some_condition(line)]
new_sum = len(filtered_group)
for line in filtered_group:
line[5] = new_sum
yield line
with open('C:\AEAtest.csv') as f_in, open('C:\AEAtest_MOD.csv', 'w') as f_out:
reader = csv.reader(f_in)
writer = csv.writer(f_out)
writer.writerows(filter_data(reader))
出力は次のとおりです。
Jan-20,Data,Class xpv,4,11yo+,2,more data....
Jan-20,Data,Class xpv,4,11yo+,2,more data....
Jan-30,Data,Class tn2,4,10yo+,7,more data....
Jan-30,Data,Class tn2,4,10yo+,7,more data....
Jan-30,Data,Class tn2,4,10yo+,7,more data....
Jan-30,Data,Class tn2,4,10yo+,7,more data....
Jan-30,Data,Class tn2,4,10yo+,7,more data....
Jan-30,Data,Class tn2,4,10yo+,7,more data....
Jan-30,Data,Class tn2,4,10yo+,7,more data....
Jan-50,Data,Class 22zn,2,10yo+,3,more data....
Jan-50,Data,Class 22zn,2,10yo+,3,more data....
Jan-50,Data,Class 22zn,2,10yo+,3,more data....
余分な行がどのように発生しているのか疑問に思っています。興味深いことに、上記のテキストの最後の行は 23 行目で、その後にさらに 2 行の空白行が続きます。
このバグの修正に関して何か助けはありますか? よろしくお願いしますAEA