2

最初の列に重複した値を持つ csv ファイルがあります。例:

mg,known,127
mg,unknown,142
pnt,known,37
pnt,unknown,0
lmo,known,75
lmo,unknown,3
sl,known,197
sl,unknown,21
oc,unknown,32
oc,known,163
sv,known,368
sv,unknown,308
az,unknown,6
az,known,241
bug,unknown,1
bug,known,167
li,unknown,15
li,known,174
lg,known,3

私がやりたいのは、次のような新しい csv ファイルを作成することです。

header1, known, unknown
mg, 127, 142
pnt, 37, 0

私は実際に行を構築する方法を理解しようとしています:

def read_stats(path):
    has_seen = set()
    with open(writepath, 'wb') as write_csv:
        with open(path, 'r') as csv_file:
            data_reader = csv.reader(csv_file, delimiter=',')
            for line in data_reader:
                if line[0] in has_seen:

これは私が現在打たれている場所です。次の行へのポインターを保持する必要がありますか?

4

1 に答える 1

3

OrderedDictに結果を蓄積する 1 つのアプローチを次に示します。

>>> import csv
>>> import collections

>>> d = collections.OrderedDict()
>>> for header1, category, value in csv.reader(datafile):
        d.setdefault(header1, {})[category] = value

>>> for header1, m in d.items():
        print ', '.join([header1, m['known'], m['unknown']])

mg, 127, 142
pnt, 37, 0
lmo, 75, 3
sl, 197, 21
oc, 163, 32
sv, 368, 308
az, 241, 6
bug, 167, 1
li, 174, 15

行が常に最初に既知のグループと連続したペアになると想定できる場合、既知のグループの中間結果を作成し、未知のグループの完全な行を出力できます。

>>> for header1, category, value in csv.reader(data):
        if category == 'known':
            result = [header1, value]
        else:
            result += [value]
            print ', '.join(result)

mg, 127, 142
pnt, 37, 0
lmo, 75, 3
sl, 197, 21
oc, 163, 32
sv, 368, 308
az, 241, 6
bug, 167, 1
li, 174, 15
于 2013-04-17T03:21:25.103 に答える