python - 将字符串(数字)增加到总计并打印

标签 python csv

我有一个 csv 文件,我需要按字符串中的某些数字进行总计。我得到了帮助以达到目前的目的,答案非常好。我是 python 的新手。 我的示例 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_045_blank, , , , , , , , , , , ,55
date,ttp_ws_sm_057_blank, , , , , , , , , , , ,98
date,ttpv1_001_, , , , , , , , , , , ,67
date,ttpv1_001_01, , , , , , , , , , , ,67*

我的代码只在打印时将所有 001 合计为一行。 我需要获取所有不同的代码,如 001、045、002 等,这样我就可以打印出每个数字的所有总数。

import csv
import sys
import os

def main():
    total = 0
    source = '\\\\Isfs\\data$\\GIS Carto\TTP_Draw_Count' 
    with open(os.path.join(source, 'TTP_13_08.csv'), 'r') as f:
        rows = csv.reader(f)
       club_num = str(int('001') + 1

       for row in rows:
            try:
                t = row[1].split('_')
            except IndexError:
                continue
            if len(t) >= 4 and t[3] == (club_num) or \
            len(t) >= 2 and t[1] == (club_num):
                total += int(row[13])
            club_num = int(club_num + 1)
    print (str(club_num) + '\t' + str(total))

if __name__ == '__main__':
    main()

如果我去掉 club_num 会得到一个不错的结果

Club 001    148

我需要的是

club 001   148
club 002   some number
club 045   200
etc...

最佳答案

通过正则表达式提取您的俱乐部号码并将结果收集到 defaultdict(int) 中:

from collections import defaultdict
import csv
import re
import os

def main():
    result = defaultdict(int)
    regexp = re.compile('ttp_ws_sm_(\d+)_')

    source = '\\\\Isfs\\data$\\GIS Carto\TTP_Draw_Count' 
    with open(os.path.join(source, 'TTP_13_08.csv'), 'r') as f:
        rows = csv.reader(f)

        for row in rows:
            match = regexp.search(row[1])
            if match:
                result[match.group(1)] += int(row[13])

    for key, value in result.iteritems():
        print "club %s %s" % (key, value)

if __name__ == '__main__':
    main()

打印:

club 001 148
club 057 98
club 045 200

关于python - 将字符串(数字)增加到总计并打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18901908/

相关文章:

c# - 神经网络/机器学习,如何将数据转化为数字?

java - 解析文本文件时如何跳行?

c# - 解析 csv 以基于一个字段创建没有重复条目的查询

python - 在 SocketServer 中处理来自 ('127.0.0.1' , xxxx) 的请求时发生异常

python - 跨平台桌面目录路径?

python - 用python制作GCF计算器

ruby - 使用 CSV 类解析 Ruby 中的 .csv 文件

python - 根据输入参数调用unittest中的不同方法

python - Scala 相当于 python itertools 'cycle'

python - 如何向目录中的所有 CSV 文件批量添加列标题并保留这些文件?