Как получить содержимое небольшого файла ASCII в Python?

Вы правы, так оно и работает. Однако это не рекомендуется, потому что кто-то, кто наследует ваш класс, может непреднамеренно разбить его.

34
задан vaab 5 November 2012 в 13:52
поделиться

4 ответа

В текущей реализации CPython оба обычно сразу закрывают файл. Однако язык Python не дает такой гарантии для второго - файл в конечном итоге будет закрыт, но финализатор не может быть вызван до следующего цикла gc. Такие реализации, как Jython и IronPython, будут работать таким образом, поэтому рекомендуется явно закрывать файлы.

Я бы сказал, что лучше всего использовать первое решение, хотя open обычно предпочтительнее file . Обратите внимание, что вы можете немного сократить его, если предпочитаете краткость второго примера:

def file_get_contents(filename):
    with open(filename) as f:
        return f.read()

Часть __ exit __ диспетчера контекста будет выполняться, когда вы оставите тело для any причина, включая исключения и возврат из функции - там '

49
ответ дан 27 November 2019 в 06:00
поделиться

Использование оператора with на самом деле лучший способ убедиться , что файл действительно закрыт.

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

3
ответ дан 27 November 2019 в 06:00
поделиться
import os

def file_get_contents(filename):
  if os.path.exists(filename):
    fp = open(filename, "r")
    content = fp.read()
    fp.close()
    return content

В этом случае он вернет None, если файл не существует, и дескриптор файла будет закрыт перед выходом из функции.

2
ответ дан 27 November 2019 в 06:00
поделиться

с обеспечит закрытие файла при выходе блока.

Во втором примере дескриптор файла может оставаться открытым (Python делает нет гарантии, что он закрыт или когда вы этого не сделаете явно).

2
ответ дан 27 November 2019 в 06:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: