Python – когда использовать файл или открыть
Вопрос
В чем разница между file
и open
на питоне?Когда мне следует использовать какой из них?(Скажем, я в 2,5)
Решение
Вы всегда должны использовать open()
.
Как документация состояния:
При открытии файла предпочтительнее использовать Open () вместо того, чтобы вызывать этот конструктор напрямую.Файл более подходит для типа тестирования (например, написания "IsinStance (f, файл)").
Также, file()
был удален начиная с Python 3.0.
Другие советы
Две причины:Философия Python: «Должен быть один способ сделать это» и file
уходит.
file
это фактический тип (используя, например, file('myfile.txt')
вызывает его конструктор). open
— это фабричная функция, которая возвращает файловый объект.
В питоне 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)
Как видите, для существования обоих есть веская причина и четкий вариант использования для обоих.
Функционально они одинаковы; open
позвоню file
в любом случае, так что в настоящее время разница - это вопрос стиля.А Документы Python рекомендую использовать open
.
При открытии файла предпочтительнее использовать open() вместо прямого вызова конструктора файла.
Причина в том, что в будущих версиях они не гарантированно будут такими же (open
станет фабричной функцией, которая возвращает объекты разных типов в зависимости от открываемого пути).
Всегда используйте open() только для открытия файлов.file() фактически удаляется в версии 3.0 и на данный момент устарел.У них были какие-то странные отношения, но file() сейчас работает, так что больше не о чем беспокоиться.
Следующее взято из документации Python 2.6.[скобки] добавлено мной.
При открытии файла предпочтительнее использовать open() вместо прямого вызова конструктора [file()].file больше подходит для типового тестирования (например, запись isinstance(f, file)
По словам г-на Ван Россума, хотя open() в настоящее время является псевдонимом file(), вам следует использовать open(), поскольку в будущем это может измениться.