Вопрос-Ответ

Correct way to write line to file?

Правильный способ записи строки в файл?

Как мне записать строку в файл на современном Python? Я слышал, что это устарело:

print >>f, "hi there"

Кроме того, "\n" работает на всех платформах или мне следует использовать "\r\n" в Windows?

Переведено автоматически
Ответ 1

Это должно быть так просто, как:

with open('somefile.txt', 'a') as the_file:
the_file.write('Hello\n')

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


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


Немного полезного чтения:

Ответ 2

Вам следует использовать print() функцию, которая доступна начиная с Python 2.6+

from __future__ import print_function  # Only needed for Python 2
print("hi there", file=f)

Для Python 3 вам не нужна функция import, поскольку по умолчанию используется функция print().

Альтернативой в Python 3 было бы использовать:

with open('myfile', 'w') as f:
f.write('hi there\n') # python will convert \n to os.linesep

Цитата из документации по Python, касающейся перевода строк:


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


Смотрите также: Чтение и запись файлов - Учебное пособие по Python

Ответ 3

В документах python рекомендуется этот способ:

with open('file_to_write', 'w') as f:
f.write('file contents\n')

Итак, я обычно делаю это так

Инструкция из docs.python.org:


Рекомендуется использовать ключевое слово 'with' при работе с файловыми объектами. Преимущество этого метода в том, что файл закрывается должным образом после завершения его набора, даже если по пути возникает исключение. Это также намного короче, чем запись эквивалентных блоков try-finally .


Ответ 4

Что касается операционной системы.linesep:

Вот точный неотредактированный сеанс интерпретатора Python 2.7.1 в Windows:

Python 2.7.1 (r271:86832, Nov 27 2010, 18:30:46) [MSC v.1500 32 bit (Intel)] on
win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.linesep
'\r\n'
>>> f = open('myfile','w')
>>> f.write('hi there\n')
>>> f.write('hi there' + os.linesep) # same result as previous line ?????????
>>> f.close()
>>> open('myfile', 'rb').read()
'hi there\r\nhi there\r\r\n'
>>>

В Windows:

Как и ожидалось, os.linesep НЕ приводит к тому же результату, что и '\n'. Он никак не может привести к тому же результату. 'hi there' + os.linesep эквивалентно 'hi there\r\n', что НЕ эквивалентно 'hi there\n'.

Это так просто: используйте \n который будет автоматически переведен в ОС.linesep. И это было так просто с момента первого переноса Python в Windows.

Нет смысла использовать os.linesep в системах, отличных от Windows, и это приводит к неправильным результатам в Windows.

НЕ ИСПОЛЬЗУЙТЕ os.linesep!

python