Python - Когда использовать файл против открытого - PullRequest
136 голосов
/ 22 сентября 2008

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

Ответы [ 6 ]

152 голосов
/ 22 сентября 2008

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

Как указано в документации :

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

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

32 голосов
/ 22 сентября 2008

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

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

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

19 голосов
/ 22 сентября 2008

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)

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

7 голосов
/ 22 сентября 2008

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

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

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

4 голосов
/ 22 сентября 2008

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

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

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

2 голосов
/ 22 сентября 2008

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

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