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

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

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

慕森王 2019-10-20 16:12:19
在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.csvhi,dude\r\r\nhi2,dude2\r\r\n而不是预期的:hi,dude\r\nhi2,dude2\r\n为什么会发生这种情况,或者这实际上是期望的行为?
查看完整描述

3 回答

?
开满天机

TA贡献1786条经验 获得超13个赞

在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-21
?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

例如,它不能在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-21
  • 3 回答
  • 0 关注
  • 571 浏览
慕课专栏
更多

添加回答

举报

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