В чем разница между file
и open
в Python? Когда я должен использовать какой? (Скажем, я в 2,5)
139
Вы всегда должны использовать 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 () только для открытия файлов. file () фактически удаляется в версии 3.0, и в настоящее время он устарел. У них были какие-то странные отношения, но file () сейчас работает, так что больше не о чем беспокоиться.
Следующее - из документации Python 2.6. [скобки] добавлены мной.
источник
По словам г-на Ван Россума, хотя open () в настоящее время является псевдонимом для file (), вы должны использовать open (), потому что это может измениться в будущем.
источник