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

在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

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


慕森王
浏览 574回答 3
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)......

江户川乱折腾

例如,它不能在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视为二进制格式更可取,也更自然。我提供这个答案作为你考虑的另一种选择。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python