Как мне записать строку в файл на современном Python? Я слышал, что это устарело:
print >>f, "hi there"
Кроме того, "\n" работает на всех платформах или мне следует использовать "\r\n" в Windows?
Переведено автоматически
Ответ 1
Это должно быть так просто, как:
withopen('somefile.txt', 'a') as the_file: the_file.write('Hello\n')
Из документации:
Не используйте os.linesep в качестве ограничителя строки при записи файлов, открытых в текстовом режиме (по умолчанию); используйте вместо этого один '\n' на всех платформах.
При записи выходных данных в поток, если перевод строки имеет значение None, любые '\n' записанные символы переводятся в системный разделитель строк по умолчанию, os.linesep. Если перевод строки равен '' or '\n', перевод не выполняется. Если символ новой строки является любым из других допустимых значений, любые '\n' написанные символы преобразуются в данную строку.
Рекомендуется использовать ключевое слово 'with' при работе с файловыми объектами. Преимущество этого метода в том, что файл закрывается должным образом после завершения его набора, даже если по пути возникает исключение. Это также намного короче, чем запись эквивалентных блоков try-finally .
Ответ 4
Что касается операционной системы.linesep:
Вот точный неотредактированный сеанс интерпретатора Python 2.7.1 в Windows:
Python 2.7.1 (r271:86832, Nov 272010, 18:30:46) [MSC v.150032 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.