利用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()
哇哦哇哦,很有用
这是换行符的问题。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 )可以根据系统自动选择换行符。
蟹蟹