Python写入CSV会添加空行

76

我试图写入CSV文件,但中间有空行。如何删除这些空行?

import csv
b = open('test.csv', 'w')
a = csv.writer(b)
data = [['Me', 'You'],\
        ['293', '219'],\
        ['54', '13']]
a.writerows(data)
b.close()

1
定义“data”行的末尾不需要反斜杠。Python在包围方括号内部忽略换行,即在“[”和“]”之间。 - Zags
如果我错了,请纠正我,但是那个反斜杠是续行符,不是吗? - KennethG
1
这是旧的内容,但我注意到没有人回复。如果有逗号,则不需要使用续行符。 - gprx100
参见:如何使用Python读写CSV文件? - Martin Thoma
5个回答

117

在Python 3中,您使用csv模块的方式在几个方面发生了变化 (文档), 至少在打开文件时需要注意。无论如何,类似于以下代码:

import csv
with open('test.csv', 'w', newline='') as fp:
    a = csv.writer(fp, delimiter=',')
    data = [['Me', 'You'],
            ['293', '219'],
            ['54', '13']]
    a.writerows(data)

应该能够工作。


错误:TypeError:对于此函数,'newline'是无效的关键字参数。 - Saad Bin Shahid
2
@SaadBinShahid:那你没有使用Python 3。 - DSM

21
如果你在Windows上使用Python 2.x,你需要将代码中的一行open('test.csv', 'w')更改为open('test.csv', 'wb')。也就是说,你应该将文件以二进制文件的形式打开。

但是,正如其他人所指出的,在Python 3.x中,文件接口已经发生了变化。


1
这是由于Windows在编写文本时自动添加nl字符而不是二进制引起的吗? - Gjordis
我正在使用Python33……不知道这是否有任何区别! - user2031063
@Gjordis 没错。更详细的信息,请查看我的回答中的文档链接。 - Wilduck
它对我来说没有运行。 - user2031063
2
@Wilduck:这确实很重要,因为2/3 str/bytes的更改取决于OP使用的Python版本。 - DSM
显示剩余11条评论

15
import csv

hello = [['Me','You'],['293', '219'],['13','15']]
length = len(hello[0])

with open('test1.csv', 'wb') as testfile:
    csv_writer = csv.writer(testfile)
    for y in range(length):
        csv_writer.writerow([x[y] for x in hello])

将产生如下输出

Me You
293 219
13 15
希望这能帮到你。

希望这能帮到你


谢谢,但是“wb”会给我一个错误。 - user2031063
这是你遇到的同样错误吗?https://dev59.com/5m035IYBdhLWcg3wW-pa - John Smith
这个解决方案有帮助吗? - John Smith
没有,它出现了这个错误。 - user2031063
追溯(Traceback)最近的一次调用: 文件“C:/Python33/CSV-test.py”,第3行,在<module>中: a = csv.write(b) 属性错误(AttributeError):“module”对象没有“write”属性。 - user2031063
1
直接复制我现在的代码,这对我有效。 - John Smith

5

在Python 2中,为了处理空行,您需要以二进制b模式打开文件。而在Python 3中则不需要这样做。

因此,请将open('test.csv', 'w')更改为open('test.csv', 'wb')


我尝试了但是出现了这个错误:w.writrows(data) 'str'不支持缓冲区接口。我正在使用python33..不知道是否有任何区别!! - user2031063

3

Pyexcel 可以很好地与 Python2 和 Python3 兼容,使用时没有问题。

使用pip快速安装:

pip install pyexcel

之后,只需要3行代码就可以完成任务:

import pyexcel
data = [['Me', 'You'], ['293', '219'], ['54', '13']]
pyexcel.save_as(array = data, dest_file_name = 'csv_file_name.csv')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接