Как мне передать 2 параметра в csv-writer из моего списка? - PullRequest
0 голосов
/ 02 октября 2019

В настоящее время я пытаюсь сохранить свой список 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

Не могли бы вы помочь мне, ребята? Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 02 октября 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.

  • Для вашего минимального максимума я экстраполировализ вашего ожидаемого вывода, и использовал дополнительный шаг: я отсортировал ваш исходный список по значению (с itemgetter) и записал последний (максимальное значение) и первый (минимальное значение) элемент в 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

0 голосов
/ 02 октября 2019

Превратите ваш список в плоский список перед итерацией создания 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)

output

[[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']]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...