如何从列表中向csvwriter传递2个参数?

2024-10-04 03:15:53 发布

您现在位置:Python中文网/ 问答频道 /正文

当前我正在尝试保存格式为bitrateListEqualized的列表:

[[2.221408], ['Wed Oct  2 11:05:28 2019']]
[[2.347744], ['Wed Oct  2 11:05:29 2019']]
[[2.47408], ['Wed Oct  2 11:05:30 2019']]

使用以下代码.csv文件:

with open("/home/user/bitrateFolder/Bitrate_history_ip_{}:{}.csv".format(MCAST_GRP,MCAST_PORT,),"w+", newline='') as csvfile:
        thewriter = csv.writer(csvfile, delimiter=',')
        thewriter.writerow(['values','dates'])
        for x in range(len(bitrateListEqualized)):
            bitrateListEqualized[x][0][0] = bitrateListEqualized[x][0][0]*8/(SAMPLING_TIME*1000000)
            data = [bitrateListEqualized[x]]
            thewriter.writerow(data)
        thewriter.writerow(max(bitrateListEqualized))
        thewriter.writerow(min(bitrateListEqualized))

保存此列表的结果是:

values,dates
"[[10.73856], ['Wed Oct  2 11:11:23 2019']]"
"[[10.780672], ['Wed Oct  2 11:11:24 2019']]"
"[[10.73856], ['Wed Oct  2 11:11:25 2019']]"
"[[10.73856], ['Wed Oct  2 11:11:26 2019']]"
"[[10.759616000000001], ['Wed Oct  2 11:11:27 2019']]"
"[[10.73856], ['Wed Oct  2 11:11:28 2019']]"
"[[10.770143999999998], ['Wed Oct  2 11:11:29 2019']]"
"[[10.73856], ['Wed Oct  2 11:11:30 2019']]"
[10.780672],['Wed Oct  2 11:11:24 2019']
[10.73856],['Wed Oct  2 11:11:23 2019']

我希望.csv文件如下所示:

values,dates
10.73856,Wed Oct  2 11:11:23 2019
10.780672,Wed Oct  2 11:11:24 2019
10.73856,Wed Oct  2 11:11:25 2019
10.780672,Wed Oct  2 11:11:24 2019
10.73856,Wed Oct  2 11:11:23 2019

你们能帮帮我吗?先谢谢你


Tags: 文件csvcsvfile代码列表data格式oct
2条回答

在csv创建迭代之前,将您的列表转换为一个平面列表

bitrateListEqualized  = [
    [[2.221408], ['Wed Oct  2 11:05:28 2019']],
    [[2.347744], ['Wed Oct  2 11:05:29 2019']],
    [[2.47408], ['Wed Oct  2 11:05:30 2019']]
]



flat_lst = [[x[0][0],x[1][0]]for x in bitrateListEqualized]
print(flat_lst)

输出

[[2.221408, 'Wed Oct  2 11:05:28 2019'], [2.347744, 'Wed Oct  2 11:05:29 2019'], [2.47408, 'Wed Oct  2 11:05:30 2019']]

有两个问题需要解决:使用列表列表写入csv,并在最后对其进行排序

我想到的是:

with open("/home/user/bitrateFolder/{}_{}.csv".format(MCAST_GRP, MCAST_PORT), "w", newline='') as csvfile:
        thewriter = csv.writer(csvfile, delimiter=',')
        thewriter.writerow(['values','dates'])
        for e in bitrateListEqualized:
            thewriter.writerow([e[0][0]*8/(SAMPLING_TIME*1000000), e[1][0]])
        sorted_bilateralListEqualizer = sorted([[e[0][0], e[1][0]] for e in bitrateListEqualized], key=itemgetter(1))
        thewriter.writerow(sorted_bilateralListEqualizer[-1]) # max
        thewriter.writerow(sorted_bilateralListEqualizer[0]) # min
  • 我用下划线替换了您的“:”,因为我在编写文件路径时遇到了问题。 我遍历您的列表,对于bilateralListEqualizer中的每个元素,我得到element[0][0],值和element[1][0],日期。 这两个进入一个列表:[value, date],然后这个可以作为一行写入csv输出

  • 对于minmax,我从预期的输出中推断出来,并使用了一个额外的步骤:我按值对原始列表进行排序(使用itemgetter),并将最后一个(max value)和第一个(min value)元素写入csv

排序的输出如下所示:

[[2.221408, 'Wed Oct 2 11:05:28 2019'], [2.347744, 'Wed Oct 2 11:05:29 2019'], [2.47408, 'Wed Oct 2 11:05:30 2019']]

如果你需要更多的细节,请告诉我

这是我得到的输出(忽略值的值,我创建了一个虚拟的SAMPLING_TIME):

output

相关问题 更多 >