Как написать символы конца строки Unix в Windows, используя Python - PullRequest
65 голосов
/ 29 марта 2010

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

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

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

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

Ответы [ 3 ]

77 голосов
/ 02 мая 2014

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

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

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

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

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

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

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

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

58 голосов
/ 29 марта 2010

Для 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' в режим, так что вы можете использовать его независимо от платформы для всех двоичных файлов.

8 голосов
/ 29 марта 2010

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

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