В чем разница между fileи openв Python? Когда я должен использовать какой? (Скажем, я в 2,5)
Ответы:
Вы всегда должны использовать open().
Как указано в документации :
При открытии файла предпочтительно использовать open () вместо прямого вызова этого конструктора. file больше подходит для тестирования типов (например, написание "isinstance (f, file)").
Кроме того, file() он был удален с Python 3.0.
Две причины: Философия Python «Должен быть один способ сделать это» и fileуходит.
fileявляется фактическим типом (использование, например file('myfile.txt'), вызывает его конструктор). open- это заводская функция, которая возвращает файловый объект.
В python 3.0 fileсобирается перейти от встроенного к реализации несколькими классами в ioбиблиотеке (что-то вроде Java с буферизованными считывателями и т. Д.)
file()- это тип, например int или список. open()- это функция для открытия файлов, которая возвращает fileобъект.
Это пример того, когда вам следует использовать open:
f = open(filename, 'r')
for line in f:
process(line)
f.close()
Это пример того, когда вам следует использовать файл:
class LoggingFile(file):
def write(self, data):
sys.stderr.write("Wrote %d bytes\n" % len(data))
super(LoggingFile, self).write(data)
Как видите, есть веская причина для того, чтобы существовать и то и другое, и ясный вариант использования для обоих.
withзаявлением. with open(filename, 'r') as f: \ for line in f: \ process(line). Это позволяет избежать явного закрытия. Python 2.6 и выше изначально поддерживают этот withоператор. В Python 2.5 вы должны добавить from __future__ import with_statementв начало кода.
fileкласс был оснащен специальными методами, которые автоматически вызываются всякий раз, когда файл открывается с помощью withоператора. Эти специальные методы обеспечивают правильное и безопасное открытие и закрытие файла.
Функционально они идентичны; openвсе fileравно будет звонить , поэтому в настоящее время разница заключается в стиле. Документы Python рекомендуют использовать open.
При открытии файла предпочтительнее использовать open () вместо прямого вызова конструктора файла.
Причина в том, что в будущих версиях они не обязательно будут одинаковыми ( openстанут фабричной функцией, которая возвращает объекты разных типов в зависимости от пути, который она открывает).
Всегда используйте open () только для открытия файлов. file () фактически удаляется в версии 3.0, и в настоящее время он устарел. У них были какие-то странные отношения, но file () сейчас работает, так что больше не о чем беспокоиться.
Следующее - из документации Python 2.6. [скобки] добавлены мной.
При открытии файла предпочтительно использовать open () вместо прямого вызова этого конструктора [file ()]. file больше подходит для тестирования типов (например, запись isinstance (f, file)
По словам г-на Ван Россума, хотя open () в настоящее время является псевдонимом для file (), вы должны использовать open (), потому что это может измениться в будущем.