Как я могу писать в файлы с помощью Python (в Windows) и использовать символ конца строки Unix?
например, при выполнении:
f = open ('file.txt', 'ш') f.write ('привет \ п') 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 (), чтобы использовать терминаторы конца строки LF в стиле Unix:
import io
f = io.open('file.txt', 'w', newline='\n')
Это работает в Python 2.6+. В Python 3 вы также можете использовать параметр встроенной open()
функции newline=
вместо io.open()
.
Старый способ предотвратить преобразование новой строки, который не работает в Python 3, - это открыть файл в двоичном режиме, чтобы предотвратить перевод символов конца строки:
f = open('file.txt', 'wb') # note the 'b' meaning binary
но в Python 3 двоичный режим будет читать байты, а не символы, поэтому он не будет делать то, что вы хотите. Вы, вероятно, получите исключения, когда попытаетесь выполнить строковый ввод-вывод в потоке. (например, «TypeError: 'str' не поддерживает интерфейс буфера»).
'\n'
direct, это более явно, чем ''
, и я думаю, что это легче читать.
'\n'
понятнее, чем ''
. Тогда мне не понадобятся комментарии, чтобы объяснить, что делает код :) Но имейте в виду, что это верно только для записи файлов. При чтении файлов newline='\n'
это не совсем то же самое, что и newline=''
, поскольку readlines()
разделение происходит только \n
в первом случае, но при newline=''
этом будет выполняться универсальная обработка новой строки, но все равно будут возвращаться фактические новые строки из файла в данных. Спасибо за предложение! Программа тестирования Python
'\n'
что увидите то же самое, что было переключено ранее, вы можете использовать кодировку Unicode (убедитесь, что кодировка - utf-8 или что-то еще совместимое). with open('file.txt', 'w', encoding='utf-8', newline='\u000A')
; PS результат ничем не отличается от newline='\n'
версии, просто если кому-то нужно больше комфорта.
Вам нужно будет использовать двоичный псевдо-режим при открытии файла.
f = open('file.txt', 'wb')