Image

Image_winnie wrote in Imageru_python

закрытие файла при помощи refcount/GC - кошерно ли?

Вот тут я не закрываю файл, открытый на чтение:

lines = [l.strip() for l in open('objects.txt').readlines()]

Я уверен, что не будут запускать такое на Jython, который честно предупреждает, что будет звать __del__ неизвестно когда.

Насколько (не)правильно писать в стиле

data = open('data.bin', 'rb').read()
или
lines = open('objects.txt').read().splitlines()

не только в односекундных скриптах на выброс, но и в коде который должен работать много часов или обрабатывать 10000 файлов?


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


---------------------------------------------------
PS.
Для себя решил так - если мы знаем что с CPython интерпретатора никуда не перезжаем - то можно и так писать.

Если проект - долгоживущий и есть подозрение о том что его части будут использоваться в будущих непонятных интерпретаторах - стоит завести отдельные close-безопасные:) функции для часто испльзующихся операций с файлами, навроде

def get_file_data(filename):
    f = open(filename, "rb")
    try:
        return f.read()
    finally:
        f.close()