Почему в языке Python нет метода writeln ()? - PullRequest
19 голосов
/ 04 апреля 2010

Если нам нужно записать новую строку в файл, мы должны кодировать:

file_output.write('Fooo line \n')

Есть ли причины, по которым у Python нет метода writeln()?

Ответы [ 5 ]

23 голосов
/ 04 апреля 2010

В Python 2 используйте:

print >>file_output, 'Fooo line '

В Python 3 используйте:

print('Fooo line ', file=file_output)
10 голосов
/ 05 апреля 2010

Было опущено, чтобы обеспечить симметричный интерфейс методов file, и потому что writeln() не имеет смысла:

  • read() соответствует write(): они оба работают с необработанными данными
  • readlines() соответствует writelines(): они оба работают на линиях, включая их EOL
  • readline() используется редко; итератор выполняет ту же работу (за исключением необязательного параметра size)

A writeline() (или writeln()) будет по существу таким же, как write(), поскольку он не будет добавлять EOL (в соответствии с поведением writelines()).

Лучший способ имитировать print для файла - это использовать специальный синтаксис печати в файл Python 2.x или ключевое слово file аргумента функции print(), как предложил Дэниел.

Лично я предпочитаю синтаксис print >>file, ... над file.write('...\n').

4 голосов
/ 28 января 2013

Я чувствую, что так и должно быть. Ближайшая вещь, которую вы можете использовать:

file_output.writelines([foo_msg, '\n'])
2 голосов
/ 18 мая 2010

print() - это функция, которую вы ищете. Как и большая часть основного полиморфизма в python, печать обеспечивается встроенной функцией вместо использования методов (например, len(), next(), repr() и т. Д.!).

Функция print(), являющаяся универсальным интерфейсом, также делает его более универсальным без необходимости реализации самими файловыми объектами. В этом случае по умолчанию он завершается символом новой строки, но его можно выбрать при вызове функции, например:

print("text", file=sys.stderr, end="\n")

В предложенном вами случае использования все файловые объекты должны будут реализовывать не только метод .write() (теперь используется print()), но также .writeln() и, возможно, даже больше! Этот основанный на функциях полиморфизм делает Python очень богатым, не обременяя интерфейсы (вспомните, как работает утка).

Примечание: эта модель всегда была в центре Python. Это только более чисто в моих примерах, которые относятся к Python 3

0 голосов
/ 04 апреля 2010

Вероятно, нет никакой реальной причины, просто что действительно легко написать новую строку, когда вам это нужно, так зачем зачем загромождать файловый интерфейс дополнительным методом, чтобы сделать это?

...