Дополнительно
Правильный способ записи строки в файл?
Я'привык делать print >>f, "hi there"
.
Однако, похоже, что print >>>
становится устаревшим. Какой способ рекомендуется использовать для выполнения приведенной выше строки?
Update:
Что касается всех ответов с "\n"
... это универсально или специфично для Unix? IE, должен ли я делать "\r\n"
на Windows?
972
12
Это должно быть как простой, как:
Из Документации:
Некоторым полезно читать:
С
заявлениеоткрыть()
ОС
(в частности,ОС.linesep
)Вы должны использовать функцию
print()
, которая доступна начиная с Python 2.6+Для Python 3 вам не нужен
import
, так как функцияprint()
используется по умолчанию.Альтернативой может быть использование:
Цитирую из документации Python относительно newline:
В питон документы рекомендую этот способ:
Так что это, как я обычно это делаю :)
Заявление от docs.python.org:
В отношении ОС.linesep:
Здесь является точной неотредактированный языке Python 2.7.1 переводчик сеанс в Windows:
На Windows:
Как и ожидалось, ОС.linesep ли не производить такой же результат, как
'\П'
. Нет никакого способа, которым он мог бы произвести тот же результат.'привет' + ОС.linesep
эквивалентно'привет\р\н', который **** не эквивалентно
'привет\п'`.Он's это просто: используйте
\П
, который будет переведен автоматически в ОС.linesep. И это'ы было так просто с тех пор, как первый порт на Python в Windows.Нет никакого смысла в использовании ОС.linesep на не-Windows систем, и он выдает неправильные результаты на Windows.
Не используйте ОС.linesep!
Я не думаю, что существует "правильный" путь.
Я бы использовал:
In memoriam Tim Toady.
В Python 3 это функция, но в Python 2 вы можете добавить это в начало исходного файла:
Затем вы делаете
Если вы пишете много данных и скорость вы должны, вероятно, пойти с
ф.писать(...)
. Я сделал небольшое сравнение скорости и она значительно быстрее, чем `печать(..., файл=Ф)`` при выполнении большого количества операций записи.В среднем
писать
закончили в 2.45 s на моей машине, в то время какпечать
ушло около 4 раз длиннее (9.76 сек). Это, как говорится, в большинстве реальных сценариях это не будет проблемой.Если вы решите перейти с
с принтом(..., файл=Ф)` - вы, вероятно, обнаружите, что вы'll хочу подавить строки время от времени, или заменить его чем-то другим. Это может быть сделано путем установки параметра необязательные
окончание``, например;Какой бы путь вы выбираете я'd предлагает с помощью
с
, так как это делает код намного легче читать.Обновление: такая разница в показателях объясняется тем, что
пишут
- это сильно буфер и возвращает до каких-либо записей на диск на самом деле происходит (см. Этот ответ), в то время какпечать
(вероятно) использует буфферизацию. Простой тест для этого можно было бы проверить работу на длительный пишет также, Где недостатки (в плане скорости) для буфферизацию будет менее выраженным.Разница в производительности становится гораздо менее выраженным, в среднем 2.20 S для
писать
и 3.10 дляпечать
. Если вам нужно объединить кучу строк, чтобы получить это займет слишком много, производительность будет страдать, так использовать-случаях, когдапечать
будет эффективнее немного редко.С 3.5 вы также можете использовать [pathlib][1] для этой цели:
[1]: https://docs.python.org/3/library/pathlib.html#pathlib.Path.write_text
Когда вы сказали, что линия это означает, что некоторые сериализации героев, которые закончились на '\П' символы. Строка должна быть последней в какой-то момент, поэтому мы должны рассмотреть '\П' в конце каждой строки. Вот решение:
в режиме дописывания после каждой записи курсора переместить на новую строку, если вы хотите использовать 'ш' режим вы должны добавить '\П' герои в конце написать() функции:
Можно также использовать модуль ввода-вывода, Как в:
Вы также можете попробовать
записывает
типун установить автоматически
`` из импорта записывает писатель
Писатель(именем='my_file', ВН='тхт') << ["по-рядка 1 Привет там-то", "в строке 2" и] `
Пишет в
my_file.txt`Принимает Iterable или объект с поддержкой ул.____`.
Когда мне нужно написать много новых строк, я определяю лямбда-выражение, которое использует функцию печати:
Этот подход имеет то преимущество, что он может использовать все функции, доступные с функцией печати.
Обновление: как упоминается Георгий в разделе комментариев, можно улучшить эту идею с
частичной
функция:ИМХО, это более функциональная и менее запутанный подход.