Python学习

python写入csv有多余空行解决方案

利用python把数组中的内容写到csv中,发现每行中间都有一个多余的空行。而输出为txt格式就不会。

csvfile = open('ho.csv', 'a')
writer = csv.writer(csvfile,dialect='excel')
writer.writerow(['1', '2', '3','4','5'])
data = [
   [3,3,2],[4,4,2],[1,1,0],[2,2,2],[1,1,1]
]
writer.writerows(data)

csvfile.close()

网上有解决方案数说是将打开方式选择为二进制方式。如将‘a’改为‘ab’,将‘w’改为’wb’

csvfile = open('ho.csv', 'ab')
writer = csv.writer(csvfile,dialect='excel')
writer.writerow(['1', '2', '3','4','5'])
data = [
   [3,3,2],[4,4,2],[1,1,0],[2,2,2],[1,1,1]
]
writer.writerows(data)

csvfile.close()

但是我出现编译错误:
TypeError: a bytes-like object is required, not ‘str’

最终的解决方案是在open()函数中加入参数lineterminator=’\n’
这样写入就OK啦 ╮(╯▽╰)╭

csvfile = open('ho.csv', 'a')
writer = csv.writer(csvfile,dialect='excel',lineterminator='\n')
writer.writerow(['1', '2', '3','4','5'])
data = [
   [3,3,2],[4,4,2],[1,1,0],[2,2,2],[1,1,1]
]
writer.writerows(data)

csvfile.close()

3 comments

这是换行符的问题。Windows 换行是 ‘\r\n’(回车,换行),而Unix是 ‘\n’。

csv模块默认的换行符是 ‘\r\n’ (https://docs.python.org/3.2/library/csv.html#csv.Dialect.lineterminator),所以我猜你用的是Unix系统,会出现两次换行,第二次换行就是一个空行。

用lineterminator=’\n’可以改默认的换行,但是我猜如果你导出的文件在Windows系统打开会不能换行。

比较好的解决方法是lineterminator=os.linesep(https://docs.python.org/release/3.2/library/os.html#os.linesep )可以根据系统自动选择换行符。

Leave a Comment

您的电子邮箱地址不会被公开。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据