Как я могу писать файлы с использованием Python (в Windows) и использовать символ конца строки Unix?
например. При выполнении:
f = open('file.txt', 'w') f.write('hello\n') f.close()
Python автоматически заменяет \n на\r\n.
Как я могу писать файлы с использованием Python (в Windows) и использовать символ конца строки Unix?
например. При выполнении:
f = open('file.txt', 'w') f.write('hello\n') f.close()
Python автоматически заменяет \n на\r\n.
Смотрите: Современный способ: используйте ответ newline = '' на этой самой странице.
Откройте файл как двоичный, чтобы предотвратить перевод концевых символов:
f = open('file.txt', 'wb')
Указание руководства Python:
В Windows, 'b', добавленный в режим, открывает файл в двоичном режиме, поэтому существуют также такие режимы, как "rb", "wb" и "r + b". Python в Windows делает различие между текстовыми и двоичными файлами; конечные символы в текстовых файлах автоматически изменяются, когда данные считываются или записываются. Эта за кадром модификация файловых данных отлично подходит для текстовых файлов ASCII, но они повреждают двоичные данные, подобные этим в файлах JPEG или EXE. Будьте очень осторожны, чтобы использовать двоичный режим при чтении и записи таких файлов. В Unix не помешает добавить "b" в режим, поэтому вы можете использовать его платформу независимо для всех двоичных файлов.
Используйте параметр ключевого слова 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 "не поддерживает интерфейс буфера" ).
При открытии файла вам потребуется использовать двоичный псевдо-режим.
f = open('file.txt', 'wb')