В чем разница между 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 (), потому что это может измениться в будущем.