f.write vs print >> f

Существует как минимум два способа записи в файл в python:

f = open(file, 'w') f.write(string) 

или

 f = open(file, 'w') print >> f, string 

Есть ли разница между этими двумя? Или еще один питонический? Я пытаюсь написать кучу HTML в файл, поэтому мне нужен куча записей для записи / печати через мой файл (но мне не нужен механизм шаблонов).

7 Solutions collect form web for “f.write vs print >> f”

print делает вещи file.write , не позволяет вам пропускать форматирование строк для некоторых основных вещей.

Он вставляет пробелы между аргументами и добавляет терминатор линии.

 print "a", "b" # prints something like "ab\n" 

Он вызывает специальные методы объекта __str__ или __repr__ чтобы преобразовать его в строку.

 print 1 # prints something like "1\n" 

Вам придется вручную делать это, если вы использовали file.write вместо print .

Я несколько не согласен с некоторыми из высказанных здесь мнений, что print >> f является избыточным, и его следует избегать в пользу f.write .

print и file.write – совсем другие операции. file.write просто непосредственно записывает строку в файл. print больше похож на «render values ​​to stdout как текст». Естественно, результат перевода строки как текста – это просто строка, поэтому print >> f, my_string и f.write(my_string) почти взаимозаменяемы (за исключением добавления новой строки). Но ваш выбор между file.write и print обычно должен основываться на том, что вы делаете; вы пишете строку в файл или вы передаете значения в файл?

Конечно, print не является строго необходимой , поскольку вы можете реализовать ее с помощью file.write . Но тогда file.write не является строго необходимым, потому что вы можете реализовать его с операциями в os для работы с файловыми дескрипторами. На самом деле они работают на разных уровнях, и вы должны использовать то, что наиболее подходит для вашего использования (обычно на уровне другого соседнего кода работает или на самом высоком уровне, который не мешает вам).

Я чувствую, что синтаксис print >> f довольно ужасен и является действительно хорошим примером того, почему print должна была быть функцией все время. Это значительно улучшилось в Python 3. Но даже если вы пишете код Python 2, который вы планируете print >> f, thing1, thing2, thing3, ... на Python 3, гораздо проще конвертировать print >> f, thing1, thing2, thing3, ... в print(thing1, thing2, thing3, file=f) , чтобы преобразовать окружность, в которой вы сворачиваете свой собственный код, чтобы сделать эквивалент рендеринга print , а затем вызвать f.write(text) . Я уверен, что полуавтоматический конвертер от Python 2 до Python 3 даже сделает для вас конверсию, чего не удалось сделать, если вы избегаете формы print >> f .

Итог: используйте print для рендеринга значений в stdout (или в файл). Используйте f.write для записи текста в файл.

Вы не должны делать ничего подобного. Для большинства Pythonic нужно использовать функцию печати Python 3 (в отличие от инструкции печати Python 2):

 f = open(file, 'w') print(string, file=f) 

Конечно, идеальный способ сделать это – просто использовать Python 3. Но если вы застряли с помощью Python 2, вы можете включить его, используя будущий оператор в верхней части файла:

 from __future__ import print_function 

Обратите внимание, что это изменяет печать другими способами, наиболее очевидно, что вам нужно добавить скобки вокруг своих аргументов. Но изменения – все улучшения, что является всей причиной изменения Python 3. В то время как вы на нем, рассмотрите возможность использования всех будущих операторов для получения как можно большего количества резервных улучшений от Python 3.

Согласитесь с @agf

Я предпочел print(..., file=f) из-за его гибкости.

 with open('test.txt', 'w') as f: print('str', file=f) print(1, 20, file=f) 

Также легко преобразовать существующую команду print .

write принимает только строку.

Документация по print может помочь в этом: print statement (документация Python 2.7).

print , по умолчанию, печатает на стандартный вывод, который на самом деле является «файловым» объектом ( sys.stdout ). Сам стандартный вывод имеет метод write() . Использование print >> f кажется ненужной абстракцией.

Кроме того, мне кажется слишком многословным. f.write() отлично.

Как bottonline: используйте file.write при записи в файлы.

Идиома «>>» для печати была заимствована из C ++ в ранние дни Python и довольно неписана – настолько, что она больше не существует в Python 3.x – там, где можно использовать печать, теперь вместо функции вместо функции, для записи в файл – но без специального синтаксиса для этого.

Поскольку @agf указывает на его ответ, использование «print» для записи в файл делает больше вещей, чем просто вызов write – он автоматически вызывает str (obj), чтобы получить строковое представление объекта, тогда как .write требует, чтобы (байтовый) строка передается как параметр – в мире Python «явный лучше, чем неявный», поэтому еще один мотив для перехода к файлу file.write.

Это предпочтительный способ, используя обработчики контекста:

 with open(file, 'w') as f: f.write(string) 

На python 2 я предпочитаю file.write потому что синтаксис >> устарел. Для python 3 вы можете вместо этого использовать функцию печати, что вы должны заметить, делает некоторые дополнительные вещи (например, автоматически конвертирует числа в строки для вас и т. Д.).

Python - лучший язык программирования в мире.