Для чего нужен os.linesep?

Модуль OS Python содержит значение для строки, разделяющей строку для конкретной платформы, но в документах прямо сказано, что не следует использовать ее при записи в файл:

Не используйте os.linesep в качестве ограничителя строки при записи файлов, открытых в текстовом режиме (по умолчанию); вместо этого используйте один '\ n' на всех платформах.

Документы

Предыдущие вопросы изучили почему тыне должен использовать его в этом контексте, но тогда для чего он полезен? Когда следует использовать разделитель строк и для чего?

Ответы на вопрос(2)

Решение Вопроса

в документах прямо сказано не использовать его при записи в файл

Это не точно, док говорит не использовать его втекст Режим.

os.linesep используется, когда вы хотите перебрать строки текстового файла. Внутренний сканер распознаетos.linesep и замените его одним "\ n".

Для иллюстрации мы напишем двоичный файл, который содержит 3 строки, разделенные "\ r \ n" (разделитель Windows):

import io

filename = "text.txt"

content = b'line1\r\nline2\r\nline3'
with io.open(filename, mode="wb") as fd:
    fd.write(content)

Содержимое двоичного файла:

with io.open(filename, mode="rb") as fd:
    for line in fd:
        print(repr(line))

NB. Я использовал режим «rb» для чтения файла как двоичного файла.

Я получил:

b'line1\r\n'
b'line2\r\n,'
b'line3'

Если я читаю содержимое файла в текстовом режиме, вот так:

with io.open(filename, mode="r", encoding="ascii") as fd:
    for line in fd:
        print(repr(line))

Я получил:

'line1\n'
'line2\n'
'line3'

Разделитель заменяется на «\ n».

os.linesep также используется в режиме записи: любой символ "\ n" преобразуется в системный разделитель строк по умолчанию: "\ r \ n" в Windows, "\ n" в POSIX и т. д.

Сio.open Функция, которую вы можете заставить разделитель строки на что угодно.

Пример: как написать текстовый файл Windows:

with io.open(filename, mode="w", encoding="ascii", newline="\r\n") as fd:
    fd.write("one\ntwo\nthree\n")

Если вы читаете этот файл в текстовом режиме, как это:

with io.open(filename, mode="rb") as fd:
    content = fd.read()
    print(repr(content))

Ты получаешь:

b'one\r\ntwo\r\nthree\r\n'

Как вы знаете, чтение и запись файлов в текстовом режиме в python преобразует разделитель строки, специфичный для платформы, в '\ n' и наоборот. Но если вы читаете файл в двоичном режиме, преобразование не происходит. Затем вы можете явно конвертировать окончания строк, используяstring.replace(os.linesep, '\n'), Это может быть полезно, если файл (или поток или что-то еще) содержит комбинацию двоичных и текстовых данных.

 Nizam Mohamed28 июн. 2016 г., 14:34
Это не будет работать, если кодировка несовместима с ascii.len('\n'.encode('utf-16')) это 4

Ваш ответ на вопрос