Подтвердить что ты не робот

Python, перенос списка и запись в файл CSV

Мне нужно записать в файл csv с помощью python, и каждый элемент iterator должен начинаться в новой строке. Таким образом, разделителем, который я использую, является "\n". После того, как каждый список будет записан, следующий список должен записать следующую ячейку. как показано ниже:

 lol = [[1,2,3],[4,5,6]]

csv будет выглядеть так:

1 4
2 5
3 6

Что я пробовал:

file = open("test.csv", "wb")
fileWriter = csv.writer(file , delimiter='\n',quotechar='|', quoting=csv.QUOTE_MINIMAL)
spamWriter.writerow([1,2,3])
spamWriter = csv.writer(file , delimiter=',',quotechar='|', quoting=csv.QUOTE_MINIMAL)
spamWriter.writerow([4,5,6])
file.close()

Какие результаты выглядят следующим образом:

 1
 2
 3
 4 5 6

Используя модуль csv, как я могу получить вывод, как показано ниже:

 1 4 
 2 5
 3 6

здесь пространство означает запятую в файле csv.

Спасибо.

4b9b3361

Ответ 1

Без использования zip вы можете сделать это:

import csv

lol = [[1,2,3],[4,5,6],[7,8,9]]
item_length = len(lol[0])

with open('test.csv', 'wb') as test_file:
  file_writer = csv.writer(test_file)
  for i in range(item_length):
    file_writer.writerow([x[i] for x in lol])

Это будет выводиться в test.csv:

1,4,7
2,5,8
3,6,9

Ответ 2

сначала перенесите свой ввод с помощью zip()

>>> zip(*lol)
[(1, 4), (2, 5), (3, 6)]

а затем просто перейдите к csw.writer например.

with open("test.csv", "wb") as f:
    fileWriter = csv.writer(f, delimiter=',',quotechar='|', quoting=csv.QUOTE_MINIMAL)
    for row in zip(*lol):
        fileWriter.writerow(row)

..., что приводит к следующему:

$ cat test.csv 
1,4
2,5
3,6