Можно вот так делать:
content = pathlib.Path('file').read_bytes()
В таком случае всё правильно закроется.
Вообще нужно стараться уже современные методы работы с файлами и путями использовать, а не доисторические.
Вы, кстати, самозакрывающуюся читалку и сами сделать можете:
def readfromfile(filename, mode='t'):
assert mode in {'b', 't'}
with open(filename, mode=mode) as f:
return f.read()
Но зачем, когда есть замечательный pathlib в третьем питоне из коробки?
Ну и еще добавлю про незакрытие файлов.
В продакшн коде, который планирует жить долго, конечно нужно всё правильно закрывать, но если это у вас мелкий одноразовый скрипт, который не открывает миллионов файлов, то вполне можно забить на его закрытие. По завершении процесса (интерпретатора) все его дескрипторы будут высвобождены.