0

私は以前にこの質問をし、私の答えを受け取りました。ここで、合計数を含む 1 行を出力するために、列を合計する必要があります。

*私はPythonが初めてで、3番目の「_」の後の文字に基づいて特定の行を選択する必要があるcsvファイルがあります。

これは csv ファイルのサンプルです。

header row
date,ttp_ws_sm_001_01, , , , , , , , , , , ,117
date,ttp_ws_sm_001_blank, , , , , , , , , , , ,31
date,ttp_ws_sm_045_01, , , , , , , , , , , ,145
date,ttp_ws_sm_057_blank, , , , , , , , , , , ,98
date,ttpv1_001_, , , , , , , , , , , ,67
date,ttpv1_001_01, , , , , , , , , , , ,67*

これは、私が構築している最初の項目を解決したコードです:

with open(...) as f:
    rows = csv.reader(f)
    for row in rows:
        t = row[1].split('_')
        if len(t) >= 4 and t[3] == '001':
            print (row[1], row[13])

結果:

('ttp_ws_sm_001_01', '117')
('ttp_ws_sm_001_blank', '31')

私がする必要があるのは、117 と 31 を追加して、合計数だけで 1 行を印刷できるようにすることです。これは私がこれまでに試したことであり、巨大なリストを取得しています。

import csv
import sys

total = 0
source = '\\\\file path' 
with open(source + '\filename') as f:
    rows = csv.reader(f)

    for row in rows:
        t = row[1].split('_')
        if len(t) >= 4 and t[3] == '001': 
            for number in range(13):    
                total += int(row[13])
                 print ('Club 001' + '\t' + str(total))
4

1 に答える 1

1

内側の for ループのため、すべての値を 13 回合計しています。意図的だったかどうかはわかりません。

値を合計するだけなら、次のようにします。

import csv
import sys
import os

if __name__ == '__main__':
    total = 0
    source = '.'
    with open(os.path.join(source, 'data.csv'), 'r') as f:
        rows = csv.reader(f)
        for row in rows:
            try:
                t = row[1].split('_')
            except IndexError:
                continue
            if len(t) >= 4 and t[3] == '001': 
                total += int(row[13])
    print ('Club 001' + '\t' + str(total))
于 2013-09-19T15:15:47.127 に答える