如何在Python中将列表数据写入CSV文件的列和行中?

19 投票
5 回答
123044 浏览
提问于 2025-04-17 02:55

我有一个列表,里面又包含了很多小列表,我想把它们写进一个csv文件里,形成行和列的格式。我试过用writerows,但是效果不是我想要的。我的列表示例如下:

[[1, 2], [2, 3], [4, 5]]

用这个方法:

example = csv.writer(open('test.csv', 'wb'), delimiter=' ')
example.writerows([[1, 2], [2, 3], [4, 5]])

我得到的结果是1 2在一个单元格里,2 3在另一个单元格里,等等。这样并不是我想要的效果,我希望1在一个单元格里,2在下一个单元格里。

我需要把这个示例列表写入一个文件,这样当我用Excel打开时,每个元素都能在自己的单元格里。

我的输出应该是这样的:

1 2
2 3
4 5

每个元素都在不同的单元格里。

5 个回答

3

如果你在写一个CSV文件,那为什么要用空格作为分隔符呢?CSV文件通常使用逗号或者分号(在Excel中)来分隔单元格,所以如果你用delimiter=' ',其实你并没有真正生成一个CSV文件。你应该直接使用csv.writer的默认分隔符和方言。如果你想以后在Excel中读取这个CSV文件,可以明确指定Excel的方言,这样可以让你的意图更清楚(虽然这个方言本来就是默认的):

example = csv.writer(open("test.csv", "wb"), dialect="excel")
12
>>> import csv
>>> with open('test.csv', 'wb') as f:
...     wtr = csv.writer(f, delimiter= ' ')
...     wtr.writerows( [[1, 2], [2, 3], [4, 5]])
...
>>> with open('test.csv', 'r') as f:
...     for line in f:
...         print line,
...
1 2 <<=== Exactly what you said that you wanted.
2 3
4 5
>>>

为了让Excel能够正确打开这个文件,你需要使用逗号(这是csv文件的默认分隔符)作为分隔符,除非你所在的地区(比如欧洲)需要用分号。

16

提供的例子使用了 csv 模块,非常不错!另外,你也可以简单地使用格式化字符串来写入文本文件,像下面这个示例:

l = [[1, 2], [2, 3], [4, 5]]

out = open('out.csv', 'w')
for row in l:
    for column in row:
        out.write('%d;' % column)
    out.write('\n')
out.close()

我用了 ; 作为分隔符,因为它在 Excel 中效果最好(这是你的一个要求)。

希望这对你有帮助!

撰写回答