Подтвердить что ты не робот

Как написать символы конца строки Unix в Windows с помощью Python

Как я могу писать файлы с использованием Python (в Windows) и использовать символ конца строки Unix?

например. При выполнении:

f = open('file.txt', 'w')
f.write('hello\n')
f.close()

Python автоматически заменяет \n на\r\n.

4b9b3361

Ответ 1

Для Python 2 и 3

Смотрите: Современный способ: используйте ответ newline = '' на этой самой странице.

Только для Python 2 (исходный ответ)

Откройте файл как двоичный, чтобы предотвратить перевод концевых символов:

f = open('file.txt', 'wb')

Указание руководства Python:

В Windows, 'b', добавленный в режим, открывает файл в двоичном режиме, поэтому существуют также такие режимы, как "rb", "wb" и "r + b". Python в Windows делает различие между текстовыми и двоичными файлами; конечные символы в текстовых файлах автоматически изменяются, когда данные считываются или записываются. Эта за кадром модификация файловых данных отлично подходит для текстовых файлов ASCII, но они повреждают двоичные данные, подобные этим в файлах JPEG или EXE. Будьте очень осторожны, чтобы использовать двоичный режим при чтении и записи таких файлов. В Unix не помешает добавить "b" в режим, поэтому вы можете использовать его платформу независимо для всех двоичных файлов.

Ответ 2

Современный способ: используйте newline = ''

Используйте параметр ключевого слова newline= для io.open(), чтобы использовать концевые терминалы конца строки в стиле Unix:

import io
f = io.open('file.txt', 'w', newline='\n')

Это работает в Python 2.6+. В Python 3 вы также можете использовать встроенный параметр open() function newline= вместо io.open().

Старый способ: двоичный режим

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

f = open('file.txt', 'wb')    # note the 'b' meaning binary

но в Python 3 двоичный режим будет читать байты, а не символы, поэтому он не будет делать то, что вы хотите. Вероятно, вы получите исключения, когда попытаетесь выполнить строковый ввод-вывод в потоке. (например, "TypeError:" str "не поддерживает интерфейс буфера" ).

Ответ 3

При открытии файла вам потребуется использовать двоичный псевдо-режим.

f = open('file.txt', 'wb')