我有一个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...
答案 0 :(得分:2)
通过正则表达式提取您的分数,并将结果收集到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