如果考虑到carriage return = \r
和line feed = \n
Python 3.5.1 (v3.5.1:37a07cee5969, Dec 6 2015, 01:38:48) [MSC v.1900 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> '{:02x}'.format(ord('\n'))
'0a'
>>> '{:02x}'.format(ord('\r'))
'0d'
使用open('filename','w').write('text\n')
时如何避免写回车?
在交互模式下,您可以执行以下操作:
>>> open('filename','w').write('text\n')
5
>>> for c in open('filename','r').read():
... print('{:02x}'.format(ord(c)))
...
74
65
78
74
0a
这表示只写入换行符,因此它应该是5个字节长。
-rw-r--r-- 1 djuric 197121 6 Jul 15 21:00 filename
^
实际上是6个字节长。现在这可以是一个" Windows的东西",但是当您在Notepad ++中打开文件时,然后转动查看>显示符号>显示所有字符您可以看到那里的回车。
按下CTRL + H并使用扩展搜索模式替换\ r时,只剩下换行符。保存文件后,只有换行符在文件中,文件长度为5个字节。
-rw-r--r-- 1 djuric 197121 5 Jul 15 20:58 filename1
^
那么为什么Notepad ++能够在没有回车的情况下保存换行符,但是python不能?
答案 0 :(得分:9)
您可以在打开文本文件时将''
传递给newline
参数来执行此操作。
f = open('test.txt', 'w', newline='')
f.write('Only LF\n')
f.write('CR + LF\r\n')
f.write('Only CR\r')
f.write('Nothing')
f.close()
如docs:
中所述换行符控制通用换行模式的工作方式(仅适用于 文字模式)。它可以是None,'','\ n','\ r'和'\ r \ n'。它起作用 如下:
从流中读取输入时,如果换行为“无”,则启用通用换行模式。输入中的行可以以'\ n','\ r'或者结尾 '\ r \ n',这些在返回之前会被翻译成'\ n' 呼叫者,召集者。 如果是'',则启用通用换行模式,但行 结尾将返回给调用者未翻译。如果有任何结果 其他合法值,输入行仅由给定的终止 字符串,并将行结尾返回给未翻译的调用者。
将输出写入流时,如果换行为None,则写入的任何“\ n”字符都将转换为系统默认行 分离器,os.linesep。如果换行符是''或'\ n',则不需要翻译 地点。如果换行符是任何其他合法值,则为'\ n' 写的字符被翻译成给定的字符串。
newline
的默认值为None
,通过指定''
,您迫使Python编写换行符\n
或\r
)翻译它。