首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Windows上,Python中的CSV添加了额外的回车

在Windows上,Python中的CSV添加了额外的回车
EN

Stack Overflow用户
提问于 2010-07-07 10:34:25
回答 3查看 229.4K关注 0票数 297
代码语言:javascript
复制
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,如下所示:

代码语言:javascript
复制
hi,dude\r\r\nhi2,dude2\r\r\n

而不是预期的

代码语言:javascript
复制
hi,dude\r\nhi2,dude2\r\n

为什么会发生这种情况,或者这实际上是所需的行为?

EN

回答 3

Stack Overflow用户

发布于 2013-07-18 21:59:33

虽然@john-machin给出了一个很好的答案,但它并不总是最好的方法。例如,除非将所有输入编码到CSV编写器,否则它在Python3上不起作用。而且,如果脚本想要使用sys.stdout作为流,它也不会解决这个问题。

我建议在创建编写器时设置“lineterminator”属性:

代码语言:javascript
复制
import csv
import sys

doc = csv.writer(sys.stdout, lineterminator='\n')
doc.writerow('abc')
doc.writerow(range(3))

该示例将在Python2和Python3上运行,不会产生不需要的换行符。但是,请注意,它可能会产生不需要的换行符(在Unix操作系统上省略LF字符)。

然而,在大多数情况下,我认为行为比将所有CSV视为二进制格式更可取、更自然。我提供此答案作为替代方案供您参考。

票数 267
EN

Stack Overflow用户

发布于 2017-06-02 04:41:49

您必须添加属性newline="\n“来打开函数,如下所示:

代码语言:javascript
复制
with open('file.csv','w',newline="\n") as out:
    csv_out = csv.writer(out, delimiter =';')
票数 2
EN

Stack Overflow用户

发布于 2017-10-24 05:39:33

请注意,如果使用DictWriter,将有一个来自open函数的新行和一个来自writerow函数的新行。您可以在open函数中使用newline='‘来删除多余的换行符。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3191528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档