Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python将重叠的时间范围合并到csv文件中_Python_Csv - Fatal编程技术网

Python将重叠的时间范围合并到csv文件中

Python将重叠的时间范围合并到csv文件中,python,csv,Python,Csv,我试图使用python在csv文件上迭代,找到重叠的时间范围,然后在最后一列中求和相应的每秒带宽bps值。生成的csv文件应指示每个时间段消耗的带宽或bps 源文件的格式如下:; 开始时间、结束时间、协议、SrcIP、DstIP、bps 00:06:01,00:06:02,TCP,10.33.239.176172.16.168.7699619 00:06:01,00:06:02,ICMP,10.33.236.247172.16.171.254,0 00:06:01,00:06:02,UDP,10

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

源文件的格式如下:; 开始时间、结束时间、协议、SrcIP、DstIP、bps 00:06:01,00:06:02,TCP,10.33.239.176172.16.168.7699619 00:06:01,00:06:02,ICMP,10.33.236.247172.16.171.254,0 00:06:01,00:06:02,UDP,10.33.238.55172.16.175.25312473 03:10:02,03:10:02,UDP,10.33.238.55172.16.160.2,25 03:10:02,03:10:02,TCP,10.33.236.59172.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
代码返回: {}


谢谢。

看起来你可能把事情弄得比实际需要的复杂一点。。。如果重叠时间戳的意思完全相同[这是代码假定的],那么您可以简单地使用时间戳的元组作为字典的键来构造dict,然后对bps行求和[5]。使用DefaultDiction可方便地自动将键的默认值设置为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}

谢谢你的及时回复。这看起来肯定比我的方法更简洁,但是代码现在返回:dict1[row[0],row[1]+=introw[5]ValueError:int的文本无效,基数为10:'10.26.168.75'您提供的数据是bps的第6个字段行[5],在您拥有的数据中是第8个字段吗?您在原始代码中有第[7]行吗?