Я хочу скачать файлы с FTP-сервера и заархивировать их локально в (zip) архив.
Хорошо известно, как загружать файлы и сохранять их по отдельности:
import ftplib
remote = ftplib.FTP(ftp_server)
remote.login(username, password)
for filename in file_list:
remote.retrbinary("RETR " + filename, open(filename, 'wb').write)
remote.quit()
Также хорошо известно, как добавлять файлы в архив:
import zipfile
archive = zipfile.ZipFile(archive_file)
archive.write(filename)
archive.close()
Но кажется невозможным использовать оба одновременно:
remote.retrbinary("RETR " + filename, archive.write(filename))
Это приводит к ошибке FileNotFoundError, поскольку filename
не был сохранен в локальном (временном) каталоге между ними.
Есть ли способ напрямую отправить поток файлов с FTP в zip-архив?Или было бы более эффективно загружать все файлы напрямую, добавлять их в архив, а затем удалять файлы?Я хотел бы, чтобы ввод-вывод жесткого диска был как можно ниже.