Python - когда использовать файл vs open

Какая разница между файлом и открытым в Python? Когда следует использовать какой? (Скажем, я в 2.5)

Ответ 1

Вы всегда должны использовать open().

В качестве документация говорится:

При открытии файла предпочтительнее использовать open() вместо вызова этого конструктор напрямую. файл больше подходит для тестирования типа (например, запись "isinstance (f, file)" ).

Кроме того, file() был удален с Python 3.0.

Ответ 2

Две причины: философия питона "Там должен быть один способ сделать это" и file уходит.

file - это фактический тип (используя, например, file('myfile.txt') вызывает его конструктор). open - это функция factory, которая вернет объект файла.

В python 3.0 file собирается перейти от встроенного к тому, чтобы быть реализованным несколькими классами в библиотеке io (несколько похожей на Java с буферизованными считывателями и т.д.).

Ответ 3

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)

Как вы можете видеть, есть веская причина для существования и четкого варианта использования для обоих.

Ответ 4

Функционально, два одинаковы; open все равно вызовет file, так что в настоящее время разница - это вопрос стиля. Документы Python рекомендуют использовать open.

При открытии файла предпочтительнее использовать open() вместо прямого вызова конструктора файла.

Причина в том, что в будущих версиях они не гарантируются одинаковыми (open станет функцией factory, которая возвращает объекты разных типов в зависимости от пути, который он открывает).

Ответ 5

Использовать open() только для открытия файлов. file() на самом деле удаляется в версии 3.0, и на данный момент он устарел. У них были какие-то странные отношения, но file() теперь идет, поэтому больше не нужно беспокоиться.

Ниже приведены документы Python 2.6. [скотч] добавлен мной.

При открытии файла предпочтительнее использовать open() вместо прямого вызова этого конструктора [file()]. файл больше подходит для тестирования типа (например, запись isinstance (f, file)

Ответ 6

По словам г-на Ван Россума, хотя open() в настоящее время является псевдонимом для файла(), вы должны использовать open(), потому что это может измениться в будущем.