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
为什么会发生这种情况,或者这真的是我们想要的行为吗?
Python 3:
官方csv文档建议在所有平台上使用newline= "来禁用通用换行符翻译:
with open('output.csv', 'w', newline='', encoding='utf-8') as f:
writer = csv.writer(f)
...
CSV编写器用方言的行结束符结束每一行,对于所有平台上的默认excel方言,这是'\r\n',因为这是RFC 4180推荐的。
Python 2:
在Windows上,在将文件传递给csv之前,始终以二进制模式(“rb”或“wb”)打开文件。Reader或csv.writer。
虽然文件是文本文件,但CSV被相关图书馆视为二进制格式,以\r\n分隔记录。如果分隔符以文本模式编写,Python运行时将\n替换为\r\n,因此在文件中观察到\r\r\n。
请看前面的答案。
您可以在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'])