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

kuc*_* 23 2 python ascii character-encoding

我认为这应该工作:

file = open('filename.ppm', 'wb')
file.write('upper\nlower'.encode(encoding='ascii'))
Run Code Online (Sandbox Code Playgroud)

当我运行代码时,虽然没有换行符;filename.pmm使用记事本打开时,其中包含“ upperlower”。

Bra*_*mon 5

在中指定编码open()

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

$ cat filename.ppm
upper
lower $
Run Code Online (Sandbox Code Playgroud)

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

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

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

我的猜测是,就您而言,因为您正在将字节写入输出流,所以在将“原始”字节写入文件时可能不会发生转换。

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

>>> all(i.isascii() for i in "upper\nlower")
True
Run Code Online (Sandbox Code Playgroud)