Python file.write создает дополнительный возврат каретки

Я пишу серию операторов SQL в файл с помощью python. Строка шаблона выглядит так:

store_insert = '\tinsert stores (storenum, ...) values (\'%s\', ...)' 

Я пишу в файл так:

 for line in source: line = line.rstrip() fields = line.split('\t') script.write(store_insert % tuple(fields)) script.write(os.linesep) 

Однако в результирующем результате я вижу \ r \ r \ n в конце каждой строки, а не \ r \ n, как и следовало ожидать. Зачем?

5 Solutions collect form web for “Python file.write создает дополнительный возврат каретки”

\n преобразуется в os.linesep для файлов, открытых в текстовом режиме. Поэтому, когда вы пишете os.linesep в текстовом файле в Windows, вы пишете \r\n , а \n преобразуется в результирующий \r\r\n .

См. Также документы :

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

Текстовые файлы имеют разные концы строк в разных операционных системах, но удобно работать со строками, которые имеют согласованный символ окончания строки. Python наследует соглашение от C с использованием '\n' в качестве символа окончания универсальной строки и, если необходимо, полагается на функции чтения и записи файла для преобразования. Функции чтения и записи знают об этом, если файл был открыт в text режиме по умолчанию. Если вы добавляете символ b в строку режима при открытии файла, этот перевод пропускается.

С Python 3

os.open() вводит новую строку newline которая позволяет указать строку, в которую будет переводиться любое вхождение \n .

Передача пустого аргумента newline='' отключает перевод, оставляя новый символ строки таким, какой он есть. Действителен только для текстового режима.

Из документации

На выходе, если новая строка не указана, все написанные символы '\ n' переводятся в разделитель строк по умолчанию системы os.linesep. Если новая строка – '', перевод не выполняется. Если новая строка является любым другим правовым значением, любые написанные символы \ n 'переводятся в заданную строку.

Работает на меня:

 >>> import tempfile >>> tmp = tempfile.TemporaryFile(mode="w+") >>> store_insert = '\tinsert stores (storenum, ...) values (\'%s\', ...)' >>> lines = ["foo\t\t"] >>> for line in lines: ... line = line.rstrip() ... fields = line.split("\t") ... tmp.write(store_insert % tuple(fields)) ... tmp.write(os.linesep) ... >>> tmp.seek(0) >>> tmp.read() "\tinsert stores (storenum, ...) values ('foo', ...)\r\n" 

Вы уверены, что это код, который работает, что os.linesep – это то, что вы думаете, и т. Д.?

см. документ open ():

В дополнение к стандартным режимам fopen () может быть «U» или «rU». Python обычно создается с поддержкой универсальной новой строки; снабжение «U» открывает файл в виде текстового файла, но строки могут быть прерваны одним из следующих: соглашение окончательной строки Unix '\ n', соглашение Macintosh '\ r' или соглашение Windows '\ г \ п». Все эти внешние представления рассматриваются как «\ n» в программе Python. Если Python построен без универсальной поддержки новой строки, режим с «U» совпадает с обычным текстовым режимом. Обратите внимание, что открытые таким образом файловые объекты также имеют атрибут newlines, который имеет значение None (если новые символы еще не были просмотрены), '\ n', '\ r', '\ r \ n' или кортеж, содержащий все вид новых линий.

  • Получение дружественных имен устройств в python
  • Установка SciPy на окна
  • lxml: Ошибка загрузки DLL: указанный модуль не найден
  • почему я получаю ошибку IOError: (9, «Bad file descriptor») при создании заявлений на печать?
  • Как добавить параметр «Новый» сценарий Python в контекстное меню?
  • Python: запись в новую строку файла
  • Python - как читать дату «Созданная Media» (не дата создания файла)
  • Как обнаружить нажатие клавиши ESCape в Python?
  • Как упаковать связанную DLL и файл pyd в один автономный файл pyd?
  • Поведение os.listdir на Python в Windows
  • Почему качество Tkinter намного хуже ухудшается на окнах?
  • Python - лучший язык программирования в мире.