如何使用python将ASCII编码的换行符写入文件

时间:2019-09-22 20:30:51

标签: python character-encoding ascii

我认为这应该可行:

file = open('filename.ppm', 'wb')
file.write('upper\nlower'.encode(encoding='ascii'))

运行代码时,尽管没有换行符; 用记事本打开时,filename.pmm包含“ upperlower”。

3 个答案:

答案 0 :(得分:5)

open()中指定编码:

>>> with open("filename.ppm", "w", encoding="ascii") as f:
...     f.write("upper\nlower")

$ cat filename.ppm
upper
lower $

open()函数的文档可能会提供一些线索,说明当前方法为何会为您带来意想不到的东西。

首先,关于换行符和\n\r\n

  

将输出写入流时,如果换行符为None,则写入的所有\ n字符都将转换为系统默认的行分隔符os.linesep。如果换行符是''或'\ n',则不会进行翻译。如果换行符是其他任何合法值,则所有写入的'\ n'字符都将转换为给定的字符串。

我的猜测是,由于您要向输出流写入 bytes ,因此在将“原始”字节写入文件时可能不会发生转换。

值得一提的最后一件事是使用encoding="ascii"。在这种情况下,这实际上并不重要,因为 ASCII是Unicode的子集,并且所有字符都在ASCII范围内。

>>> all(i.isascii() for i in "upper\nlower")
True

答案 1 :(得分:2)

当您以 binary 模式('wb')写入文件时,Python会精确地 写入您提供的字节。因此,即使您编写'foo\nbar',也要写入磁盘-即使'\n'在运行代码的平台上未被识别为换行标记。

如果您以 text 模式('w')写入文件,Python会convert '\n'到运行代码的平台的相应换行标记,只要您不设置newline参数:

  

将输出写入流时,如果换行符为None,则写入的所有\ n字符都将转换为系统默认的行分隔符os.linesep。如果换行符是''或'\ n',则不会进行翻译。如果换行符是其他任何合法值,则所有写入的'\ n'字符都将转换为给定的字符串。

答案 2 :(得分:1)

Windows使用\r\n代表换行符,而Linux仅使用\n。添加\r回车符以查看记事本中的换行符。

file.write('upper\r\nlower')