16

我需要使用 python 写入一个 csv 文件,并且每个迭代器项都应该在一个新行中开始。所以我使用的分隔符是“\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 文件中的逗号。

谢谢。

4

3 回答 3

13

不使用 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
于 2012-05-13T18:32:44.473 回答
11

首先通过使用转置您的输入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
于 2012-05-13T17:55:34.393 回答
4

如果您使用的是 Python3,您需要以文本格式“wt”打开文件,此外csv还有writerows可用于一次编写所有内容的文件。这是一个例子:

data=[("test", "value1", "value2"), ("test2", "value3", "value4")]
with open('my.csv','wt') as out:
   csv_out=csv.writer(out)
   csv_out.writerows(data)

我刚刚注意到问题询问如何转换列表,这是一个单独的步骤,这是我将如何做到的:

lol = [[1,2,3],[4,5,6]]
data = zip(lol[0],lol[1])
于 2018-02-22T12:50:00.727 回答