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给出了一个很好的答案,但它并不总是最好的方法。例如,除非将所有输入编码到CSV编写器,否则它在Python3上不起作用。此外,如果脚本希望使用sys.stdout作为流,它也没有解决这个问题
我建议在创建编写器时改为设置“lineterminator”属性:
该示例适用于Python2和Python3,不会产生不需要的换行符。但是,请注意,它可能会产生不需要的换行符(在Unix操作系统上省略LF字符)
然而,在大多数情况下,我相信行为比将所有CSV作为二进制格式处理更可取、更自然。我提供这个答案作为您考虑的替代方案
Python 3:
官方^{} documentation 建议
open
在所有平台上newline=''
使用newline=''
文件disable universal newlines translation:CSV编写器用^{} of the dialect 终止每一行,这是所有平台上默认的
excel
方言的'\r\n'
,因为这是RFC 4180推荐的Python 2:
在Windows上,在将文件传递给
csv.reader
或csv.writer
之前,始终以二进制模式("rb"
或"wb"
)打开文件尽管该文件是一个文本文件,但所涉及的库将CSV视为二进制格式,其中
\r\n
分隔记录。如果该分隔符是以文本模式编写的,则Python运行时将\n
替换为\r\n
,从而在文件中观察到\r\r\n
见this previous answer
在Python3中(我没有在Python2中尝试过),您也可以简单地执行以下操作
根据documentation
有关这方面的更多信息,请参阅文件footnote:
相关问题 更多 >
编程相关推荐