为了账号安全,请及时绑定邮箱和手机立即绑定

请问在Python中添加额外的回车(在Windows上)

/ 猿问

请问在Python中添加额外的回车(在Windows上)

哔哔one 2019-10-21 16:12:13

在Python中添加额外的回车(在Windows上)

在Python2.7中,运行在WindowsXPpro上:

import csv
outfile = file('test.csv', 'w')writer = csv.writer(outfile, delimiter=',', 
quoting=csv.QUOTE_MINIMAL)writer.writerow(['hi','dude'])writer.writerow(['hi2','dude2'])outfile.close()

它生成一个文件test.csv,每一行都有一个额外的\r,如下所示:

test.csv

hi,dude\r\r\nhi2,dude2\r\r\n

而不是预期的:

hi,dude\r\nhi2,dude2\r\n

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


查看完整描述

3 回答

?
守着星空守着你

在Windows上,始终以二进制模式(“RB”或“WB”)打开文件,然后将它们传递给csv.Reader或csv.Writer。

虽然该文件是文本文件,但csv被视为双星由所涉及的库格式化,并使用“\r\n”分隔记录。如果该分隔符是以文本模式编写的,则Python运行时将“\n”替换为“\r\n”,从而将您在文件中观察到的“\r\n”替换为“\r\n”。

看见这个先前的答案.


这个答案是在2010年发布的,并没有解决Python 3中的问题。

Python 3中可能的修复方法之一,如@yiboYang的答案所述,就是使用newline参数设置为空字符串:

f = open(path_to_file, 'w', newline='')writer = csv.writer(f)......



查看完整回答
反对 回复 2019-10-22
?
拉莫斯之舞

例如,它不能在Python 3上工作,除非您将所有输入编码到CSV编写器。此外,如果脚本希望使用sys.stdout作为流,则不会解决这个问题。

我建议在创建作者时设置“行终止符”属性:

import csvimport sys

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

该示例将在Python 2和Python 3上工作,不会产生不必要的换行符。但是,请注意,它可能会产生不需要的换行符(忽略Unix操作系统上的LF字符)。

然而,在大多数情况下,我认为行为比将所有CSV视为二进制格式更可取,也更自然。我提供这个答案作为你考虑的另一种选择。



查看完整回答
反对 回复 2019-10-22
?
手掌心

在Python 3中(我还没有在Python 2中尝试过这一点),您也可以简单地这样做

with open('output.csv','w',newline='') as f:
    writer=csv.writer(f)
    writer.writerow(mystuff)
    ...

文献资料.

更多关于这个在医生的脚注:

如果未指定newline=‘,则嵌入在引号字段中的换行符将无法正确解释,并且在写上使用\r\n行尾的平台上将添加额外的\r。指定newline=‘应该是安全的,因为CSV模块执行自己的(通用)换行符处理。



查看完整回答
反对 回复 2019-10-22

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信