Вы беспокоитесь о том, что вы тратите впустую память или неэффективны в том, как вы читаете файлы при их извлечении. Ответ, если вы делаете что-то «не так», просто: «Нет». Ваш код верен и не сохраняет файлы в памяти после завершения вызова функции.
Несколько замечаний о том, что вы можете улучшить.
Использование контекстных менеджеров для автоматического закрытия файла
ZipFile
также является менеджером контекста, и, как правило, рекомендуется использовать его, чтобы убедиться, что файлы закрыты и правильно очищены из памяти. Вместо того, чтобы звонить .close()
вручную, вы можете сделать следующее:
with ZipFile(file_path, "r") as zip_ref:
zip_ref.extractall("/tmp/extracts")
Затем он автоматически закроет файл после завершения работы менеджера контекста и убедится, что в памяти ничего не хранится.
Поскольку вы закрываете файл, вам не нужно опасаться, что он останется в памяти.
Чтение файлов без распаковки
Поскольку вы извлекаете файлы в папку /tmp/
, я думаю (?), Что вы на самом деле не хотите хранить файлы на диске. Возможно, все, что вы хотите сделать, это прочитать данные и что-то с ними сделать.
Вы можете прочитать каждый файл в zip-файле, не распаковывая их на диск.
with ZipFile('spam.zip') as myzip:
with myzip.open('eggs.txt') as myfile:
print(myfile.read())
Это может быть лучшим решением в зависимости от того, чего вы хотите достичь. Вы можете увидеть больше из документов Python .