Укажите кодировку в open()
:
>>> with open("filename.ppm", "w", encoding="ascii") as f:
... f.write("upper\nlower")
$ cat filename.ppm
upper
lower $
В документации для функции open()
может быть несколько подсказок о том, почему ваш текущий метод дает вам то, что вы не делали.t Ожидайте.
Во-первых, относительно новой строки и \n
против \r\n
:
При записи вывода в поток, если символ новой строки - None, любые символы \ nзаписанные переводятся в системный разделитель строк по умолчанию, os.linesep
.Если символ новой строки '' или '\ n', перевод не выполняется.Если символ новой строки является любым из других допустимых значений, любые написанные символы '\ n' преобразуются в данную строку.
Я полагаю, что в вашем случае вы пишете байтов в выходной поток, это преобразование может не произойти, так как «необработанные» байты записываются в файл.
Еще одна вещь, о которой стоит упомянуть, это использование encoding="ascii"
.В этом случае это не должно иметь значения, потому что ASCII является подмножеством Unicode, и все ваши символы попадают в диапазон ASCII.
>>> all(i.isascii() for i in "upper\nlower")
True