закрытие файла при помощи 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-безопасные:) функции для часто испльзующихся операций с файлами, навроде
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()
