Я создаю программное обеспечение Python, которое сжимает файлы/папки ... Как создать раздел кода, который запрашивает пользовательский ввод местоположения папки, а затем сжимает его. В настоящее время у меня есть код для одного файла, но не папка с файлами. Пожалуйста, подробно объясните, как это сделать.Как сжать папку с помощью модуля Python GZip?
ответ
GZip не выполняет сжатие папок/каталогов, только отдельные файлы. Вместо этого используйте модуль zipfile
.
Как говорит larsmans, сжатие gzip не используется для каталогов, а только для одиночных файлов. Обычный способ делать вещи с помощью linux - сначала поставить каталог в tarball, а затем сжать его.
Стоит упомянуть, что вы можете улучшить сжатие, когда вы tar и затем сжимаете, чем если бы вы сжимали каждый файл по отдельности. – synthesizerpatel
Я не использую пользовательский интерфейс, поэтому вы сами можете получить имя папки от пользователя. Вот один из способов создания gz-сжатого tarfile. Это не рекурсия по подпапкам, вам понадобится что-то вроде os.walk().
# assume the path to the folder to compress is in 'folder_path'
import tarfile
import os
with tarfile.open(folder_path + ".tgz", "w:gz") as tar:
for name in os.listdir(folder_path):
tar.add(name)
На самом деле вы можете просто написать «tar.add (folder_path)», и он будет добавлен рекурсивно. (Конечно, это может быть новая функция, добавленная за пять лет с момента публикации этого ответа!) Кроме того, цикл for не следует отступать здесь, если вы не измените «tar = tarfile.open (...)» на 'с tarfile.open (...) как tar:' (это хорошая идея, а затем вы можете избавиться от строки 'tar.close()'). –
Спасибо, не знаю, как эта ошибка отступа сохранилась в течение 5 лет. –
код сжать папку для гудрона файла:
import tarfile
tar = tarfile.open("TarName.tar.gz", "w:gz")
tar.add("folder/location", arcname="TarName")
tar.close()
Это работает для меня. Надеюсь, это сработает и для вас.
Разве gzip не должен делать только сжатие, а не архивирование? Разве вы не должны, возможно, смотреть на смолу? –