import csv
with open('test.csv', 'w') as outfile:
writer = csv.writer(outfile, delimiter=',', quoting=csv.QUOTE_MINIMAL)
writer.writerow(['hi', 'dude'])
writer.writerow(['hi2', 'dude2'])
上面的代码生成了一个test.csv文件,每一行都有一个额外的\r,如下所示:
hi,dude\r\r\nhi2,dude2\r\r\n
而不是预期的
hi,dude\r\nhi2,dude2\r\n
为什么会发生这种情况,或者这真的是我们想要的行为吗?
虽然@john-machin给出了一个很好的答案,但这并不总是最好的方法。例如,它不能在Python 3上工作,除非您将所有输入编码到CSV写入器。而且,如果脚本想使用sys. exe,它也不能解决这个问题。Stdout为流。
我建议在创建写入器时设置'lineterminator'属性:
import csv
import sys
doc = csv.writer(sys.stdout, lineterminator='\n')
doc.writerow('abc')
doc.writerow(range(3))
这个例子可以在python2和python3上运行,不会产生不必要的换行符。但是请注意,它可能会产生不需要的换行符(在Unix操作系统上省略LF字符)。
然而,在大多数情况下,我认为这种行为比将所有CSV都视为二进制格式更可取,也更自然。我提供这个答案作为您考虑的替代方案。
您可以在csv writer命令中引入lineterminator='\n'参数。
import csv
delimiter='\t'
with open('tmp.csv', '+w', encoding='utf-8') as stream:
writer = csv.writer(stream, delimiter=delimiter, quoting=csv.QUOTE_NONE, quotechar='', lineterminator='\n')
writer.writerow(['A1' , 'B1', 'C1'])
writer.writerow(['A2' , 'B2', 'C2'])
writer.writerow(['A3' , 'B3', 'C3'])