【发布时间】:2016-07-15 20:51:47
【问题描述】:
如果考虑到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++ 中打开文件时,你打开 View > Show Symbols > Show All Characters 你可以看到回车。
在使用扩展搜索模式按下 CTRL+H 并用空替换 \r 后,只剩下换行符。保存文件后,文件中只有换行符,文件长5个字节。
-rw-r--r-- 1 djuric 197121 5 Jul 15 20:58 filename1
^
那么为什么Notepad++可以不用回车就可以保存换行,而python却不能呢?
【问题讨论】:
-
我还是只想写\n,我不在乎操作系统做什么。如果我想指定要写入的特定字符,那么这就是我应该能够做的。
-
我更新了这个问题,也许你会发现它不值得投反对票……并实际考虑答案
-
使用
open('name', 'w')时不能避免写回车,因为模式w - write,text是一种将LF 隐式更改为CRLF 的模式。您需要使用'wb'以二进制模式打开文件。 -
open('filename','wb').write(bytes('text\n','UTF-8'))有效。谢谢@TessellatingHeckler
标签: python carriage-return linefeed