Python结合了csv文件中的重叠时间范围

时间:2015-04-07 02:39:45

标签: python csv

我正在尝试使用python迭代csv文件,找到重叠的时间范围,然后将最后一列中相应的每秒带宽(bps)值相加。生成的csv文件应指示在每个时间段内消耗的带宽或bps。

源文件具有以下格式; 开始时间,结束时间,Proto,SrcIP,DstIP,bps 00:06:01,00:06:02,TCP,10.33.239.176,172.16.168.7,699619 00:06:01,00:06:02,ICMP,10.33.236.247,172.16.171.254,0 00:06:01,00:06:02,UDP,10.33.238.55,172.16.175.253,12473 03:10:02,03:10:02,UDP,10.33.238.55,172.16.160.2,25 03:10:02,03:10:02,TCP,10.33.236.59,172.16.168.9,5

生成的csv文件应具有以下格式; 开始时间,结束时间,bps 00:06:01,00:06:02,712092 03:10:02,03:10:02,30

我是一个python新手,并尝试使用词典删除重复项。我相信有更好的方法可以做到这一点......

这是我的非工作代码;

import csv

src_file = open('c:/test/format1.csv', 'rb')
dst_file = open('c:/test/format2.csv', 'wb')
reader = csv.reader(src_file)
writer = csv.writer(dst_file,delimiter=',')

dict1 = {}
dict2 = {}
dkey = 1

# read csv values into dict1
for row in reader:
    start = row[0]
    end = row[1]
    bps = int(row[7])
    dkey += 1
    dict1[dkey] = [start, end, bps]

# read dict1 results into a new dict2 removing duplicates and summing the bps column
for k, v in dict2.items():
    if v[0] and v[1] in v:
        dict2[k] = [v[0], v[1]]
        dict2[k] += [v[2]]
    else:
        dict2[k] = [v]

print dict2

代码返回: {}

感谢。

1 个答案:

答案 0 :(得分:0)

看起来你可能会让它变得比它需要的更复杂......如果通过重叠时间标记你的意思完全相同[这是你编码的假设]那么你可以简单地使用一个dict构造dict时间戳的元组作为字典的关键,然后总结bps(行[5])。使用defaultdict(int)以方便自动将键的默认值设置为0:

from collections import defaultdict

dict1 = defaultdict(int)
# read csv values into dict1
for row in reader:
    dict1[(row[0], row[1])] += int(row[5])

print(dict(dict1))

输出:

{('00:06:01', '00:06:02'): 712092, ('03:10:02', '03:10:02'): 30}