Как сделать ZIP архив
Содержание
- 1. Создайте ZIP архив с помощью контекстного меню Windows
- 2. Используйте проводник для создания ZIP-файлов в Windows
- 3. Используйте командную строку Windows для создания ZIP-файлов
- 4. Программы для создания ZIP-файла в Windows
- 5. Добавьте файлы в существующий ZIP-файл в Windows
- 6. Как распаковать ZIP-файлы в Windows
- Извлекайте ZIP архивы с помощью проводника
- Извлечение ZIP архива с помощью командной строки
- Сжатие файлов в Windows
В этой статье рассмотрено 6 способов как сделать zip архив в Windows 10. Если хотите сделать ZIP-файл на Windows 10 а не знаете как, тогда вот самые простые способы создания архивных папок.
Вы хотите создать ZIP-архив на своем компьютере с Windows? Существуют различные причины, по которым вы хотели бы сделать это. Может быть, вы хотите объединить несколько файлов в один архив? Или, может быть, вы хотите уменьшить размер ваших файлов, сжимая их в ZIP-архиве?Независимо от причины, существуют встроенные и сторонние опции создания ZIP-файла в Windows. Вот шесть простых способов создания ZIP архива в Windows 10.
Один из самых простых способов создать ZIP файл на вашем ПК. Это использовать контекстное меню. В этом меню есть опция, которая позволяет добавлять выбранные файлы в ZIP-архив.
Для этого не нужно устанавливать какие-либо расширения или приложения. Эта функция доступна сразу после установки Windows 10.
Вы можете использовать эту опцию для добавления одного файла, нескольких файлов и даже папок в новый ZIP-архив. Вот как вы его используете:
архив с помощью контекстного меню Windows- Откройте папку где находятся файлы, которые вы хотите добавить в ZIP-файл.
- Выберите отдельные файлы, щелкнув по ним щелчком мыши. Или используйте горячие клавиши CTRL + A, чтобы выбрать все файлы в этой папке.
- Щелкните правой кнопкой мыши на любом файле и выберите «Отправить». В открывшемся контекстном меню выберите «Сжатая ZIP-папка».
- Windows создаст новый ZIP-архив с выбранными вами файлами.
Этот новый ZIP-архив помещается в ту же папку, что и ваши исходные файлы.
2. Используйте проводник для создания ZIP-файлов в Windows
Еще один встроенный способ создания ZIP-файла в Windows — это использование проводника файлов. Этот способ работает почти так же, как и пункт контекстного меню. И вы можете использовать его для добавления файлов и папок в новый ZIP-архив.
Используйте проводник для создания ZIP-файлов в WindowsВот как можно найти и воспользоваться этой функцией архивации:
- Откройте окно проводника файлов и откройте папку, в которой находятся ваши файлы.
- Выберите файлы, которые вы хотите добавить в ZIP-архив.
- Перейдите на вкладку с надписью Поделиться, которая находится в верхней части окна Проводника.
- Вы увидите опцию с надписью Сжать. Выберите этот параметр.
- Windows пойдет дальше и создаст для вас ZIP-архив. Не будет никаких подсказок или подтверждений.
3. Используйте командную строку Windows для создания ZIP-файлов
Если вы являетесь фанатом командной строки. Тогда этот способ точно для вас. Так как он полностью описывает метод создания Zip архива через командную строку.
Хочу заметить, что эта команда работает только в Windows 10.
В Windows 10 есть команда tar, которая помогает создавать или извлекать архивы на вашем компьютере. Вы можете использовать эту команду для добавления существующих файлов в ZIP-архив.
CMD для создания ZIP-файлов- Откройте окно командной строки на вашем компьютере.
- Используйте команду cd, чтобы перейти в папку, в которой находятся ваши файлы.
- Введите следующую команду в окне командной строки и нажмите Enter.
tar.exe -a -c -f output.zip myfile.txt
Заменить output.zip на любове другое имя, которое вы хотите дать своему ZIP-файлу.
myfile.txt файл который вы хотите добавить в ZIP-файл. - Командная строка создаст и сохранит ZIP-архив в текущем рабочем каталоге.
4. Программы для создания ZIP-файла в Windows
Windows 10 позволяет создавать ZIP-архивы без каких-либо приложений. Но эти возможности довольно ограничены и не совсем удобны. Если вам нужны дополнительные опции, такие как возможность выбрать уровень сжатия и разделить архив на несколько частей. Тогда вам потребуется скачать и установить дополнительные программы. Например:
7-Zip (free) это сторонний инструмент архивирования. Который вы можете использовать для создания, а также извлечения разных типов архивов на вашем компьютере. Эта программа предлагает такие опции, как разбитие архивов и добавление к ним защиты паролем. А так же многое другое.
Если вам интересны все функции 7-zip, напишите в комментарии,а я сделаю для вас подробный обзор с подробным описанием.
Программы для создания ZIP-файла в WindowsКраткая инструкция для создания ZIP-файла через команду 7-zip:
- Установите приложение 7-Zip на свой компьютер.
- Откройте приложение, и в нем появятся ваши файлы. Так как в 7-zip свой файловый менеджер.
- Используя этот менеджер, откройте папку, в которой находятся ваши файлы.
- Выберите файлы, которые вы хотите добавить в свой ZIP-архив.
- Нажмите кнопку Добавить на верхней панели инструментов.
- Укажите папку где создать Zip архив, далее формат архива, уровень сжатия, при необходимости пароль для вашего ZIP-архива. Затем нажмите кнопку ОК в нижней части экрана.
- 7-Zip создаст и сохранит архив в выбранной вами папке.
5. Добавьте файлы в существующий ZIP-файл в Windows
Если вы вдруг забыли добавить некоторые файлы при создании ZIP-архива. Не беспокойтесь, вы можете добавить файлы в существующий архив без каких-либо хлопот. Вам даже не нужна дополнительная программа. Вот что нужно сделать чтоб изменить существующий ZIP-архив:
- Откройте папку, в которой находится ваш ZIP-архив.
- В другом окне откройте папку с файлами которые вы забыли заархивировать.
- Теперь просто перетащите файлы в ZIP-архив.
- Теперь ваши файлы будут добавлены в ваш архив.
6. Как распаковать ZIP-файлы в Windows
В ОС Windows 10 можно извлечь файлы как через командную строку так и с помощью контекстного меню.
Здесь мы покажем, как извлечь архивы:
Извлечение архива с помощью проводника- Найдите ZIP-архив, который вы хотите извлечь.
- Чтобы извлечь один файл, дважды щелкните на архив и перетащите файл, который вы хотите извлечь, в папку в Проводнике.
- Чтобы извлечь все файлы, щелкните правой кнопкой мыши по ZIP-архиву и выберите пункт «Извлечь все».
- Откройте командную строку (cmd) и перейдите в каталог, где находится ZIP-архив.
- Введите следующую команду заменяя myarchive.zip, на имя вашего архива. Далее нажмите Enter.
tar.exe -xf myarchive.zip
- Командная строка распакует ваш архив в текущем рабочем каталоге.
Сжатие файлов в Windows
Пользователю Windows не нужно прилагать много усилий, чтобы сделать архивы на компьютере. Просто выберите файлы, которые вы хотите включить в свой архив, нажмите на нужную кнопку и ваш ZIP-архив будет готов.
Как создать ZIP-архив в Windows
Во время работы на компьютере практически все пользователи так или иначе сталкиваются с архивами разных типов, например, во вложениях электронной почты или при скачивании файлов из Интернета. Среди подобных расширений самым распространенным в мире является формат ZIP.
В разных ситуациях пользователю может понадобиться создать ZIP-архив на компьютере в операционной системе Windows. Чтобы выполнить эту операцию вы можете использовать встроенное средство ОС или стороннее программное обеспечение.
Содержание:
- Использование архивов
- Как создать сжатую ZIP папку средствами Windows
- Как создать архив ZIP в программе WinRAR
- Как создать ZIP файл в программе 7-Zip
- Как создать ZIP папку в Total Commander
- Выводы статьи
Использование архивов
Архив создается с помощью специализированной программы — архиватора. Вы можете поместить в архив различные файлы и папки. Архиватор сжимает файлы в архив, или сжатую ZIP-папку (в нашем случае) с расширением «*.zip».
Архивирование файлов выполняет нескольких задач:
- Сжатие файлов с целью уменьшения занимаемого места на диске.
- Удобство и увеличение скорости при передаче файлов через Интернет.
- Для хранения нескольких файлов под одним именем.
- Хранение копий важных файлов и документов.
- Для защиты файлов от посторонних.
Сжатые файлы после архивирования занимают меньше места. Эффективность сжатия зависит от типа файла. Например, обычные текстовые файлы сжимаются очень сильно, а у музыкальных файлов и картинок все зависит от формата файла. Некоторые файлы сжимаются хорошо, а другие почти не жмутся.
При отправке файлов по Сети большое значение имеет размер файлов, а также способ его передачи. Намного легче переслать один архив, чем несколько разных файлов, потому что так значительно сократиться время.
Архивные копии позволяют сохранить важные данные от потери. В случае утраты оригинальной информации вы сможете ее восстановить из архивной копии.
Если создать ZIP архив с паролем, то эти данные станут недоступными для посторонних лиц. Доступ к содержимому можно получить только после ввода пароля, установленного на данный архив. Этим способом вы создадите своего рода сейф для важных файлов.
Процесс архивирования всегда предполагает разархивирование. Файлы помещаются в архив, чтобы в случае необходимости вы могли их оттуда достать.
Вы можете использовать несколько способов для создания архива:
- Создать архив в формате ZIP встроенным средством Windows.
- Использовать сторонние программы.
- Создать ZIP архив онлайн.
Про первые два способа создать файл — ZIP архив, мы расскажем в этом руководстве. На сайте vellisa.ru вы можете прочитать статью о том, как создать ZIP архив онлайн.
Подробнее: Архиватор (разархиватор) онлайн: обзор 3 сервисов
Как создать сжатую ZIP папку средствами Windows
Сначала мы рассмотрим, как создать ZIP архив в Windows. В операционную систему встроено средство для работы с ZIP файлами, которое подходит для большинства типичных задач.
Вы можете использовать инструмент для работы с архивами из контекстного меню Проводника:
- Выделите необходимые файлы и папки.
- В контекстном меню Windows 11 нажмите на пункт «Сжать ZIP-архив».
В операционных системах Windows 10, Windows 8, Windows 7 сначала нужно выбрать пункт меню «Создать» или «Отправить», а затем «Сжатая ZIP-папка».
- В месте хранения архивированных файлов появится ZIP-папка, которой можно присвоить подходящее имя. В противном случае система самостоятельно даст имя этому архиву.
После открытия этой папки в Проводнике, содержимое ZIP-папки (архива) показывается так же, как и содержимое любой другой папки на ПК. С файлами или папками, находящимися в архиве, можно совершать любые действия: просматривать, копировать, перемещать, удалять и так далее.
Кроме того, вы можете разархивировать файлы из архива в любую папку на компьютере. В Windows используется следующий алгоритм действий:
- Выделите ZIP-папку.
- Далее используйте соответствующую кнопку на панели инструментов Проводника или контекстное меню правой кнопки мыши.
- В открывшемся контекстном меню выберите пункт «Извлечь все…».
- В окне «Распаковка сжатых ZIP-папок» выберите конечную папку и извлеките файлы.
Во встроенном в систему ZIP-архиваторе нет некоторых полезных функций:
- Нельзя разбить архив большого размера на несколько частей для более удобного перемещения или скачивания.
- Нет настроек величины степени сжатия файлов.
- На архив нельзя поставить пароль, чтобы зашифровать важные файлы.
Если вам необходимы эти функции, используйте сторонние приложения, с помощью которых вы сможете создать ZIP-архив на компьютере. Имеется большое количество подобных программ.
Программы — архиваторы обычно добавляют в контекстное меню правой кнопки мыши довольно много пунктов, ненужные из которых можно отключить в настройках приложения. Запуск операции по архивированию или разархивации выполняется непосредственно из окна подобной программы или из контекстного меню Проводника.
Как создать архив ZIP в программе WinRAR
WinRAR — популярный архиватор для работы с RAR-архивами. Помимо своего собственного формата, в этой программе можно создать ZIP-архив. Это мощное приложение для работы с архивами разных форматов.
Пройдите шаги:
- Выделите нужные файлы.
- В контекстном меню выберите «Добавить в архив…».
- В окне «Имя и параметры архива» укажите имя архива, формат архива — ZIP.
В этом окне можно выбрать место хранения архива (по умолчанию используется текущий каталог), изменить метод сжатия, разделить файлы на тома определенного размера, установить пароль.
Подробнее: Как поставить пароль на папку с помощью программы WinRAR
- Нажмите на кнопку «ОК» для запуска процесса архивации.
После завершения сжатия, файл ZIP-архива появится в выбранном месте расположения.
Как создать ZIP файл в программе 7-Zip
7-Zip — бесплатный архиватор с поддержкой большого количества форматов. Это приложение поддерживает создание сжатых ZIP-папок. Архиватор 7-Zip часто использует вместо платного WinRAR.
Сделайте следующее:
- Отройте окно программы 7-Zip.
- Откройте нужную папку, а затем выделите файлы.
- На панели инструментов нажмите на кнопку «Добавить».
- В окне «Добавить к архиву», в поле «Формат архива» укажите — «zip».
Выберите место сохранения, уровень сжатия, если нужно, разбейте архив на тома, установите пароль (опция — «Шифрование»).
Подробнее: Как поставить пароль на папку в 7-Zip
- Нажмите на кнопку «ОК».
Архив будет создан в указанной директории в соответствии с заданными параметрами.
Как создать ZIP папку в Total Commander
Total Commander — популярный файловый менеджер для операционной системы Windows. С помощью этого приложения можно создать архивы некоторых форматов, в том числе в ZIP-формате.
Выполните следующие действия:
- Откройте папку с файлами на правой панели в программе Тотал Коммандер. На левой панели откройте ту директорию, куда вам нужно сохранить созданный архив.
- Выделите нужные файлы (они окрасятся в красный цвет).
- Нажмите на кнопку «Упаковать файлы», расположенную на панели инструментов.
- В окне «Упаковка файлов» по умолчанию выбран нужный нам формат — ZIP. В случае необходимости, можете создать многотомный архив, включить шифрование или перейти в настройки, чтобы установить степень сжатия.
- Нажмите на кнопку «ОК».
После завершения операции в выбранном каталоге появится сжатая папка.
Выводы статьи
С помощью архивации пользователь может сжать файлы на своем компьютере для экономии места или для пересылки архива адресату через Интернет. Среди многочисленных расширений архивных форматов наиболее распространен формат «ZIP».
Этот формат поддерживается в операционной системе Windows, а также в специализированных программах для создания архивов. С помощью системного средства или стороннего приложения вы можете создать сжатую ZIP-папку на компьютере в операционной системе Windows.
Нажимая на кнопку, я даю согласие на обработку персональных данных и принимаю политику конфиденциальности
Командная строка— Как я могу создать zip-архив всего каталога через терминал без скрытых файлов?
Прежде всего, если вы не установили zip, сначала установите его следующим образом:
sudo apt-get install zip
Затем для простого создания zip-файла:
zip -r сжатое_имя_файла.zip имя папки
Если вы хотите исключить скрытые файлы:
find /folder_path -path '*/.*' -prune -o -type f -print | zip ~/имя_сжатого_файла.zip -@
Исключение файлов из Zip-архива (взято с http://osxdaily.com/2013/04/30/how-to-exclude-files-from-a-zip-archive/)
Основы исключения файлов при создании zip-архива центрированы вокруг флага
-x
, который используется для исключения файлов из архива которые соответствуют определенному имени или образцу. В основном это будет выглядеть так:zip архив.zip файлы -x "ExcludeMe"Это означает, что вы можете исключить один файл, скажем, с именем «Nothanks.jpg»
zip архив.zip изображения/ -x "Nothanks.jpg"Давайте рассмотрим несколько конкретных примеров, когда это полезно.
Исключить файлы .DS_Store из Zip-архивов
Это предотвратит обычно невидимые метаданные Mac
.DS_Store
файлы от включения в zip-архив, которые объединены по умолчанию:zip -r имя_архива.zip каталог_архива -x "*.DS_Store"Однако, если каталог включает в себя подкаталоги, вы захотите использовать другой вариант этой команды для исключения файлов ds_store также из подкаталогов:
zip -r каталог archive.zip -x "*/\.DS_Store"Примечание: не все оболочки требуют кавычек для работы этой команды. правильно, но в оболочке bash (по умолчанию для OS X) вам понадобится использовать кавычки для исключения подстановочных знаков и шаблонов.
Исключение определенных типов файлов из Zip-архива
С помощью подстановочных знаков вы также можете исключить все файлы определенного типа, ориентируясь на расширение. Например, эта команда заархивирует весь каталог минус любые
.jpg
файлов:zip -r каталог archive.zip -x "*.jpg"Это может быть изменено для любого конкретного расширения файла или шаблона совпадает в имени файла.
Исключить каталог .git или .svn из Zip-архива
Заархивируйте каталог, минус
.git
и его содержимое:zip -r zipdir.zip directorytozip -x "*.git*"Заархивируйте папку, не включая каталог
.svn
:zip -r каталог zip.zip -x "*.svn*"Исключить все скрытые файлы из Zip-архива
Поскольку можно использовать шаблоны и подстановочные знаки, вы также можете исключить любые или все невидимые файлы и папки, которые сделаны так, имея префикс с точкой, будь то каталог типа
. svn
или отдельный файл типа.bash_profile
или.htaccess
.zip -r имя_архива.zip каталог в zip -x "*.*"Или исключить все невидимые файлы из всех подкаталогов:
zip -r каталог archive.zip -x "*/\.*"
python — Как создать zip-архив каталога?
Задавать вопрос
спросил
Изменено 1 месяц назад
Просмотрено 666 тысяч раз
Как я могу создать zip-архив структуры каталогов в Python?
- python
- zip
- архив
- python-zipfile
4
Проще всего использовать Shutil. make_archive
. Он поддерживает форматы zip и tar.
импортный шаттл Shutil.make_archive(имя_выходного_файла, 'zip', имя_каталога)
Если вам нужно сделать что-то более сложное, чем заархивировать весь каталог (например, пропустить определенные файлы), вам нужно покопаться в модуле zipfile
, как предлагали другие.
22
Как указывали другие, вы должны использовать zipfile. В документации рассказывается, какие функции доступны, но на самом деле не объясняется, как вы можете использовать их для сжатия всего каталога. Я думаю, проще всего объяснить это на примере кода:
импорт ОС импортировать zip-файл def zipdir(путь, zip): # zip - дескриптор zip-файла для корня, каталогов, файлов в os.walk(путь): для файла в файлах: zip.write(os.path.join(корень, файл), os.path.relpath(os.path.join(корень, файл), os. path.join (путь, '..'))) с zipfile.ZipFile('Python.zip', 'w', zipfile.ZIP_DEFLATED) как zipf: zipdir('tmp/', zipf)
15
Чтобы добавить содержимое mydirectory
в новый zip-файл, включая все файлы и подкаталоги:
import os импортировать zip-файл zf = zipfile.ZipFile("myzipfile.zip", "w") для имени каталога, подкаталогов, файлов в os.walk("mydirectory"): zf.write(имя_каталога) для имени файла в файлах: zf.write(os.path.join(имя каталога, имя файла)) zf.close()
5
В скрипте Python
В Python 2.7+, Shutil
имеет функцию make_archive
.
из Shutil Import make_archive сделать_архив( 'zipfile_name', 'zip', # формат архива - или tar, bztar, gztar root_dir = Нет, # корень для архива - текущий рабочий каталог, если нет base_dir=None) # начать архивирование отсюда - cwd, если None тоже
Здесь сжатый архив будет называться zipfile_name. zip
. Если base_dir
дальше от root_dir
, то будут исключены файлы, не входящие в base_dir
, но по-прежнему архивирует файлы в родительских каталогах до root_dir
У меня возникла проблема с тестированием этого на Cygwin с 2.7 — ему нужен аргумент root_dir для cwd:
make_archive('zipfile_name', 'zip', root_dir='.')
Использование Python из оболочки
Вы можете сделать это с помощью Python из оболочки, также используя модуль zipfile
:
$ python -m zipfile -c zipname sourcedir
Где почтовый индекс
— это имя файла назначения, который вы хотите (добавьте .zip
, если хотите, он не будет делать это автоматически), а sourcedir — это путь к каталогу.
Заархивирование Python (или просто не нужен родительский каталог):
Если вы пытаетесь заархивировать пакет Python с помощью родительский каталог, это
$ python -m zipfile -c zipname sourcedir/*
И
$ python zipname
запустит пакет. (Обратите внимание, что вы не можете запускать подпакеты в качестве точки входа из заархивированного архива).
$ python -m zipapp мое приложение $ питон myapp.pyz
0
Эта функция рекурсивно сжимает дерево каталогов, сжимая файлы и записывая правильные относительные имена файлов в архив. Записи в архиве такие же, как те, которые были сгенерированы zip -r output.zip исходный_каталог
.
импорт ОС импортировать zip-файл def make_zipfile (имя выходного_файла, исходный_каталог): relroot = os.path.abspath(os.path.join(source_dir, os.pardir)) с zipfile.ZipFile(output_filename, "w", zipfile.ZIP_DEFLATED) как zip: для корня, каталогов, файлов в os.walk(source_dir): # добавить каталог (необходим для пустых каталогов) zip.write(root, os.path.relpath(root, relroot)) для файла в файлах: имя файла = os.path.join (корень, файл) if os.path.isfile(filename): # только обычные файлы arcname = os.path.join(os.path.relpath(root, relroot), файл) zip.write(имя файла, имя дуги)
1
Используйте Shutil, который является частью набора стандартных библиотек Python. Использовать Shutil очень просто (см. код ниже):
- 1-й аргумент: имя результирующего файла zip/tar,
- 2-й аргумент: zip/tar,
- 3-й аргумент: имя_каталога
Код:
импортный шаттл Shutil.make_archive('/home/user/Desktop/Filename','zip','/home/username/Desktop/Directory')
2
Современный Python (3.6+) с использованием модуля pathlib
для краткой обработки путей в стиле ООП и pathlib.Path.rglob()
для рекурсивного подстановки. Насколько я могу судить, это эквивалентно ответу Джорджа В. Рейли: zip со сжатием, самый верхний элемент — это каталог, сохраняет пустые каталоги, использует относительные пути.
из пути импорта pathlib импорт из zip-файла ZIP_DEFLATED, ZipFile из ОС импортировать PathLike от ввода импортного союза def zip_dir(zip_name: str, source_dir: Union[str, PathLike]): src_path = Путь (исходный_каталог).expanduser().resolve(strict=True) с ZipFile(zip_name, 'w', ZIP_DEFLATED) как zf: для файла в src_path.rglob('*'): zf.write(файл, file.relative_to(src_path.parent))
Примечание: как указывают необязательные подсказки типа, zip_name
не может быть объектом Path (будет исправлено в 3.6.2+).
1
С модулем python 3.9, pathlib
и zipfile
вы можете создавать zip-файлы из любой точки системы.
def zip_dir(dir: Union[Path, str], имя файла: Union[Path, str]): """Заархивируйте предоставленный каталог, не переходя к нему, используя модуль `pathlib`""" # Преобразование в объект пути реж = путь(дир) с zipfile. ZipFile(имя файла, "w", zipfile.ZIP_DEFLATED) как zip_file: для записи в dir.rglob("*"): zip_file.write (запись, entry.relative_to (каталог))
Аккуратный, типизированный и содержит меньше кода.
Чтобы добавить сжатие к результирующему zip-файлу, перейдите по этой ссылке.
Вам нужно изменить:
zip = zipfile.ZipFile('Python.zip', 'w')
до
zip = zipfile.ZipFile('Python.zip', 'w', zipfile.ZIP_DEFLATED)
0
Я внес некоторые изменения в код, предоставленный Марком Байерсом. Функция ниже также добавит пустые каталоги, если они у вас есть. Примеры должны прояснить, какой путь добавляется в zip.
#!/usr/bin/env Python импорт ОС импортировать zip-файл def addDirToZip (zipHandle, путь, базовый путь = ""): """ Добавление каталога, заданного \a путем к открытому zip-файлу \a zipHandle @param basePath путь, который будет удален из пути \a при добавлении в архив Примеры: # добавить весь "dir" в "test. zip" (при открытии "test.zip" вы увидите только "dir") zipHandle = zipfile.ZipFile('test.zip', 'w') addDirToZip(zipHandle, 'каталог') zipHandle.close() # добавить содержимое "dir" в "test.zip" (при открытии "test.zip" вы увидите только его содержимое) zipHandle = zipfile.ZipFile('test.zip', 'w') addDirToZip (zipHandle, 'каталог', 'каталог') zipHandle.close() # добавить содержимое "dir/subdir" в "test.zip" (при открытии "test.zip" вы увидите только содержимое "subdir") zipHandle = zipfile.ZipFile('test.zip', 'w') addDirToZip(zipHandle, 'каталог/подкаталог', 'каталог/подкаталог') zipHandle.close() # добавить весь "dir/subdir" в "test.zip" (при открытии "test.zip" вы увидите только "subdir") zipHandle = zipfile.ZipFile('test.zip', 'w') addDirToZip(zipHandle, 'каталог/подкаталог', 'каталог') zipHandle.close() # добавляем целый "dir/subdir" с полным путем к "test.zip" (при открытии "test. zip" вы увидите только "dir", а внутри него только "subdir") zipHandle = zipfile.ZipFile('test.zip', 'w') addDirToZip(zipHandle, 'каталог/подкаталог') zipHandle.close() # добавляем целые "dir" и "otherDir" (с полным путем) в "test.zip" (при открытии "test.zip" вы увидите только "dir" и "otherDir") zipHandle = zipfile.ZipFile('test.zip', 'w') addDirToZip(zipHandle, 'каталог') addDirToZip (zipHandle, 'другой_каталог') zipHandle.close() """ basePath = basePath.rstrip("\\/") + "" basePath = basePath.rstrip("\\/") для корня, каталогов, файлов в os.walk(путь): # добавляем саму директорию (нужно для пустых директорий zipHandle.write(os.path.join(root, ".")) # добавить файлы для файла в файлах: filePath = os.path.join (корень, файл) inZipPath = filePath.replace(basePath, "", 1).lstrip("\\/") #print filePath + " , " + inZipPath zipHandle. write(filePath, inZipPath)
Выше приведена простая функция, которая должна работать в простых случаях. Вы можете найти более элегантный класс в моем Gist: https://gist.github.com/Eccenux/17526123107ca0ac28e6
3
У меня есть еще один пример кода, который может помочь, используя python3, pathlib и zipfile. Он должен работать в любой ОС.
из пути импорта pathlib импортировать zip-файл из даты и времени импортировать дату и время DATE_FORMAT = '%y%m%d' определение date_str(): """возвращает текущую строку год, месяц, день""" вернуть '{}'.format(datetime.now().strftime(DATE_FORMAT)) def zip_name (путь): """возвращает имя zip-файла в виде строки""" cur_dir = Путь(путь).разрешить() parent_dir = cur_dir.parents[0] zip_filename = '{}/{}_{}.zip'.format(parent_dir, cur_dir.name, date_str()) p_zip = Путь (zip_filename) п = 1 пока p_zip.exists(): zip_filename = ('{}/{}_{}_{}. zip'.format(parent_dir, cur_dir.name, date_str(), п)) p_zip = Путь (zip_filename) п += 1 вернуть zip_имя_файла определить все_файлы (путь): """итератор возвращает все файлы и папки из пути в виде строки абсолютного пути """ для ребенка в Path(path).itertir(): выходная ул (дочерняя) если child.is_dir(): для grand_child в all_files(str(child)): выходная ул (Путь (grand_child)) def zip_dir (путь): """создать zip""" zip_filename = zip_name(путь) zip_file = zipfile.ZipFile(zip_filename, 'w') print('создать:', zip_filename) для файла в all_files (путь): print('добавление...', файл) zip_file.write(файл) zip_file.close() если __name__ == '__main__': zip_dir('.') распечатать('конец!')
Чтобы сохранить иерархию папок в родительском каталоге для архивации:
import glob импорт ОС импортировать zip-файл с zipfile. ZipFile(fp_zip, "w", zipfile.ZIP_DEFLATED) как zipf: для fp в glob (os.path.join (родительский, "**/*")): base = os.path.commonpath([родительский, fp]) zipf.write(fp, arcname=fp.replace(база, ""))
Если вы хотите, вы можете изменить это, чтобы использовать pathlib
для подстановки файлов.
Если вам нужна функциональность, подобная сжатию папки любого обычного графического файлового менеджера, вы можете использовать следующий код, он использует модуль zipfile. Используя этот код, вы получите zip-файл с путем в качестве корневой папки.
импорт ОС импортировать zip-файл def zipdir(путь, zip): # Перебираем все каталоги и файлы для корня, каталогов, файлов в os.walk(путь): # Создайте переменную префикса со структурой папок внутри папки пути. # Таким образом, если файл находится в каталоге пути, он будет находиться в корневом каталоге zip-файла. # поэтому префикс будет пустым. Если файл принадлежит к содержащей папку папки пути # тогда префиксом будет эта папка. если root.replace(путь,'') == '': префикс = '' еще: # Сохраняйте структуру папок после пути к папке, добавляя '/' в конце # и удалить первый символ, если это '/', чтобы путь был как # папка1/папка2/файл.txt префикс = root.replace (путь, '') + '/' если (префикс [0] == '/'): префикс = префикс[1:] для имени файла в файлах: фактический_путь_к_файлу = корень + '/' + имя файла zip_file_path = префикс + имя файла zipf.write(фактический_путь_к_файлу, заархивированный_путь_к_файлу) zipf = zipfile.ZipFile('Python.zip', 'w', zipfile.ZIP_DEFLATED) zipdir('/tmp/justtest/', zipf) zipf.close()
Здесь так много ответов, и я надеюсь, что смогу внести свой вклад со своей собственной версией, которая основана на исходном ответе (кстати), но с более графической точки зрения, также с использованием контекста для каждого zipfile
настройки и сортировки os. walk()
, чтобы иметь упорядоченный вывод.
Имея эти папки и их файлы (среди прочих папок), я хотел создать .zip
для каждой папки cap_
:
$ tree -d . ├── cap_01 | ├── 0101000001.json | ├── 0101000002.json | ├── 0101000003.json | ├── cap_02 | ├── 0201000001.json | ├── 0201000002.json | ├── 0201001003.json | ├── cap_03 | ├── 0301000001.json | ├── 0301000002.json | ├── 0301000003.json | ├── документы | ├── map.txt | ├── main_data.xml | ├── core_files ├── core_master ├── core_slave
Вот что я применил, с комментариями для лучшего понимания процесса.
$ кошка zip_cap_dirs.py """ Заархивируйте каталоги 'cap_*'. """ импорт ОС импортировать zip-файл как zf для корня, каталогов, файлов в отсортированных (os.walk ('.')): если 'cap_' в корне: print(f"Сжатие: {root}") # Определение имени .zip согласно Capítulo. cap_dir_zip = '{}.zip'.format (корень) # Открытие контекста zip-файла для текущего корневого каталога. с zf.ZipFile(cap_dir_zip, 'w', zf.ZIP_DEFLATED) как new_zip: # Перебор списка файлов os.walk для текущего корневого каталога. для f в файлах: # Определение относительного пути к файлам из текущего корневого каталога. f_path = os.path.join (корень, f) # Запись файла в .zip файл контекста new_zip.write(f_path)
По сути, для каждой итерации по os.walk(path)
, я открываю контекст для настройки zipfile
, а затем повторяю итерацию по файлам
, что представляет собой список
файлов из root
каталог, формируя относительный путь для каждого файла на основе текущего корневого каталога
, добавляя к запущенному контексту zipfile
.
И вывод представлен так:
$ python3 zip_cap_dirs.py Сжатие: ./cap_01 Сжатие: ./cap_02 Сжатие: ./cap_03
Чтобы просмотреть содержимое каждого каталога . zip
, вы можете использовать команду less
:
$ less cap_01.zip Архив: cap_01.zip Длина Метод Размер Cmpr Дата Время CRC-32 Имя -------- ------ ------- ---- ---------- ----- -------- -- -- 22017 Defl:N 2471 89% 2019-09-05 08:05 7a3b5ec6 cap_01/0101000001.json 21998 Defl:N 2471 89% 2019-09-05 08:05 155bece7 cap_01/0101000002.json 23236 Defl:N 2573 89% 2019-09-05 08:05 55fced20 cap_01/0101000003.json -------- ------- --- ------- 67251 7515 89% 3 файла
Вероятно, вы захотите взглянуть на модуль zipfile ; есть документация на http://docs.python.org/library/zipfile.html.
Вы также можете использовать os.walk()
для индексации структуры каталогов.
Для большей гибкости, т.е. выберите каталог/файл по имени используйте:
import os импортировать zip-файл def zipall(ob, path, rel=""): базовое имя = os.path.basename(путь) если os.path.isdir(путь): если отн == "": отн = базовое имя ob. write(путь, os.path.join(rel)) для корня, каталогов, файлов в os.walk(путь): для d в каталогах: zipall(ob, os.path.join(root, d), os.path.join(rel, d)) для f в файлах: ob.write(os.path.join(root, f), os.path.join(rel, f)) перерыв Элиф os.path.isfile (путь): ob.write(путь, os.path.join(rel, basename)) еще: проходить
Для файлового дерева:
. ├── директор │ ├── директор2 │ │ └── файл2.txt │ ├── директор3 │ │ └── файл3.txt │ └── файл.txt ├── директор4 │ ├── дир5 │ └── файл4.txt ├── listdir.zip ├── main.py ├── root.txt └── Selective.zip
Вы можете, например. выберите только dir4
и root.txt
:
cwd = os.getcwd() files = [os.path.join(cwd, f) для f в ['dir4', 'root.txt']] с zipfile.ZipFile("selective.zip", "w" ) как myzip: для f в файлах: zipall(myzip, f)
Или просто listdir
в каталоге вызова скрипта и добавьте все оттуда:
с zipfile. ZipFile("listdir.zip", "w" ) как myzip: для f в os.listdir(): если f == "listdir.zip": # Создание listdir.zip в том же каталоге # включит listdir.zip внутрь себя, остерегайтесь этого продолжать zipall(myzip, f)
1
Вот вариант ответа Nux, который мне подходит:
def WriteDirectoryToZipFile (zipHandle, srcPath, zipLocalPath = "", zipOperation = zipfile.ZIP_DEFLATED): basePath = os.path.split( srcPath )[ 0 ] для корня, каталогов, файлов в os.walk( srcPath ): p = os.path.join( zipLocalPath, root [ ( len( basePath ) + 1 ) : ] ) # добавить каталог zipHandle.write( root, p, zipOperation ) # добавить файлы для f в файлах: filePath = os.path.join (корень, f) fileInZipPath = os.path.join(p, f) zipHandle.write(filePath, fileInZipPath, zipOperation)
Попробуйте следующее. У меня сработало .
импортировать zip-файл, ОС zipf = "сжатие.zip" деф основной(): каталог = r"Путь к файлу" toZip(каталог) def toZip (каталог): zippedHelp = zipfile.ZipFile (zipf, "w", сжатие = zipfile.ZIP_DEFLATED) список = os.listdir(каталог) для file_list в списке: имя_файла = os.path.join (каталог, список_файлов) если os.path.isfile(file_name): распечатать имя_файла zippedHelp.write(имя_файла) еще: addFolderToZip (сжатая справка, список_файлов, каталог) print "---------------Каталог найден------------------------" заархивированныйHelp.close() def addFolderToZip (сжатая справка, папка, каталог): path=os.path.join(каталог,папка) путь печати file_list=os.listdir(путь) для имени_файла в списке_файлов: file_path=os.path.join(путь,имя_файла) если os.path.isfile(file_path): ZippedHelp.write (путь_к_файлу) Элиф os.path.isdir (имя_файла): print "------------------Подкаталог найден--------------------" addFolderToZip (сжатая справка, имя_файла, путь) если __name__=="__main__": основной()
Допустим, вы хотите заархивировать все папки (подкаталоги) в текущем каталоге.
для root, каталогов, файлов в os.walk("."): для sub_dir в каталогах: zip_you_want = sub_dir+".zip" zip_process = zipfile.ZipFile(zip_you_want, "w", zipfile.ZIP_DEFLATED) zip_process.write(file_you_want_to_include) zip_process.close() print("Каталог успешно заархивирован: {sub_dir}".format(sub_dir=sub_dir))
Заархивируйте файл или дерево (каталог и его подкаталоги).
из пути импорта pathlib из zip-файла импорт ZipFile, ZIP_DEFLATED def make_zip (tree_path, zip_path, mode='w', skip_empty_dir=False): с ZipFile(zip_path, режим=режим, сжатие=ZIP_DEFLATED) как zf: пути = [Путь (путь_дерева)] пока пути: p = пути.pop() если p.is_dir(): paths.extend(p.iterdir()) если skip_empty_dir: продолжать zf.write(p)
Чтобы добавить к существующему архиву, пройдите mode='a'
, для создания нового архива mode='w'
(по умолчанию выше). Допустим, вы хотите объединить 3 разных дерева каталогов в одном архиве.
make_zip (path_to_tree1, path_to_arch, режим = 'w') make_zip (путь_к_дереву2, путь_к_архиву, режим='а') make_zip (путь_к_файлу3, путь_к_архиву, режим='а')
Решение с использованием pathlib.Path
, которое не зависит от используемой ОС:
import zipfile из пути импорта pathlib def zip_dir (путь: путь, zip_file_path: путь): """Заархивируйте все содержимое пути к zip_файлу""" files_to_zip = [ файл для файла в path.glob('*') if file.is_file()] с zipfile.ZipFile( zip_file_path, 'w', zipfile.ZIP_DEFLATED) как zip_f: для файла в files_to_zip: печать (имя файла) zip_f.write(файл, имя файла) current_dir = Путь.cwd() zip_dir = текущий_каталог / "тест" инструменты.zip_dir( zip_dir, current_dir / 'Zipped_dir.zip')
Очевидным способом было бы пойти с Shutil, Как говорится во втором верхнем ответе, Но если вы все еще хотите использовать ZipFile по какой-то причине, И если у вас возникли проблемы с этим (например, ERR 13 в Windows д. ), вы можете использовать это исправление:
import os импортировать zip-файл def retrieve_file_paths (имя_каталога): путь к файлу = [] для корня, каталогов, файлов в os.walk(dirName): для имени файла в файлах: filePath = os.path.join (корень, имя файла) filePaths.append(filePath) вернуть путь к файлу def main(имя_каталога, имя_выходного_файла): filePaths = получить пути_файла (имя_каталога) zip_file = zipfile.ZipFile(output_filename+'.zip', 'w') с zip_файлом: для файла в пути к файлу: zip_file.write(файл) main("my_dir", "my_dir_archived")
Этот рекурсивно перебирает каждую подпапку/файл в заданной папке и записывает их в zip-файл вместо того, чтобы пытаться напрямую заархивировать папку.
Вот современный подход, использующий pathlib и контекстный менеджер. Помещает файлы прямо в zip, а не во вложенную папку.
def zip_dir (имя файла: str, dir_to_zip: pathlib.Path): с zipfile.ZipFile(имя файла, 'w', zipfile. ZIP_DEFLATED) как zipf: # Используйте glob вместо iterdir(), чтобы охватить все подкаталоги. для каталога в dir_to_zip.glob('**'): для файла в directory.itertir(): если не файл.is_file(): продолжать # Убираем первый компонент, чтобы не создавать ненужный подкаталог # содержащий все. zip_path = pathlib.Path(*file.parts[1:]) # Используйте строку, так как zipfile не поддерживает напрямую pathlib. zipf.write(str(файл), str(zip_path))
Я подготовил функцию, объединив решение Марка Байерса с комментариями Реймунда и Мортена Зилмера (относительный путь и включая пустые каталоги). Лучше всего в структуре файла ZipFile использовать с
.
Эта функция также подготавливает имя zip-файла по умолчанию с именем заархивированного каталога и расширением '.zip'. Поэтому он работает только с одним аргументом: исходным каталогом, который нужно заархивировать.
импорт ОС импортировать zip-файл def zip_dir (path_dir, path_file_zip = ''): если не path_file_zip: path_file_zip = os.path.join( os.path.dirname(path_dir), os.path.basename(path_dir)+'.zip') с zipfile.ZipFile(path_file_zip, 'wb', zipfile.ZIP_DEFLATED) как zip_file: для корня, каталогов, файлов в os.walk(path_dir): для file_or_dir в файлах + каталогах: zip_file.write( os.path.join(root, file_or_dir), os.path.relpath(os.path.join(root, file_or_dir), os.path.join(path_dir, os.path.pardir)))
# импортировать необходимые модули Python # Вам необходимо установить пакет zipfile с помощью pip install импортировать ОС, zip-файл # Измените каталог, в котором вы хотите, чтобы ваш новый zip-файл находился os.chdir('Введите пункт назначения') # Создать новый zip-файл (я назвал его myfile) zf = zipfile.ZipFile('myfile.zip','w') # os.walk дает дерево каталогов. Доступ к файлам с помощью цикла for для имен каталогов, папок, файлов в os. walk('Введите свой каталог'): zf.write('Введите свой каталог') для файла в файлах: zf.write(os.path.join('Введите каталог',файл))
Что ж, прочитав предложения, я придумал очень похожий способ, который работает с 2.7.x без создания «забавных» имен каталогов (абсолютно похожих имен) и создает только указанную папку внутри zip.
Или на тот случай, если вам нужно, чтобы ваш zip содержал папку внутри с содержимым выбранного каталога.
def zipDir( путь, zip ) : """ Вставляет каталог (путь) в экземпляр zip-файла (ziph) """ для корня, каталогов, файлов в os.walk(путь): для файла в файлах: ziph.write(os.path.join(корень, файл), os.path.basename(os.path.normpath(путь)) + "\\" + файл) def makeZip(pathToFolder): """ Создает zip-файл с указанной папкой """ zipf = zipfile.ZipFile(pathToFolder + 'file.zip', 'w', zipfile.ZIP_DEFLATED) zipDir (путь к папке, zipf) zipf.close() print("Zip-файл сохранен в: " + pathToFolder) makeZip("c:\\path\\to\\folder\\to\\insert\\into\\zipfile" )
Функция для создания zip-файла.
def CREATEZIPFILE (zipname, путь): #функция для создания zip-файла #Параметры: zipname - имя zip-файла; path - имя папки/файла, который нужно поместить в zip файл zipf = zipfile.ZipFile(zipname, 'w', zipfile.ZIP_DEFLATED) zipf.setpassword(b"password") #если вы хотите установить пароль на zip-файл #проверяет, является ли путь файлом или каталогом если os.path.isdir(путь): для файлов в os.listdir(путь): zipf.write(os.path.join(путь, файлы), файлы) Элиф os.path.isfile (путь): zipf.write(os.path.join(путь), путь) zipf.close()
2
Одна вещь, полностью упущенная из предыдущих ответов, — это тот факт, что использование os.path.join()
может легко возвращать POSIX-несовместимые пути при запуске кода в Windows. Результирующий архив будет содержать файлы с буквальными обратными косыми чертами в именах при обработке его любым распространенным программным обеспечением для архивирования в Linux, а это не то, что вам нужно.