Вы действительно не должны загромождать свою файловую систему при использовании ZipFile
, поскольку она содержит методы, которые позволяют вам читать файлы, хранящиеся в zip-архиве, непосредственно в память, а затем вы можете сохранить эти объекты вбаза данных.
В частности, мы можем использовать .infolist()
или .namelist()
для получения списка всех файлов в zip-архиве и .read()
для фактического получения их содержимого:
with ZipFile(myFile, 'r') as zipObj:
file_objects = [zipObj.read(item) for item in zipObj.namelist()]
Now file_objects
- это список bytes
объектов, которые содержат содержимое всех файлов. Я не удосужился сохранить имена или пути к файлам, потому что вы сказали, что это ненужно, но это тоже можно сделать. Чтобы увидеть, что вы можете сделать, проверьте, что на самом деле возвращается из infolist
Если вы хотите сохранить эти bytes
объекты в вашей базе данных, обычно это возможно, если ваша база данных можетподдержать его (большинство может). Однако если вы хотите получить эти файлы в виде простого текста, а не байтов, вам просто нужно сначала преобразовать их, например, .decode
:
with ZipFile(myFile, 'r') as zipObj:
file_objects = [zipObj.read(item).decode() for item in zipObj.namelist()]
Обратите внимание, что мы не сохранили никаких файлов в нашей системе. в любой момент, так что не о чем беспокоиться о том, что множество загруженных пользователем файлов загромождают вашу систему. Однако размер хранилища базы данных на вашем диске будет соответственно увеличиваться.