Как создать zip архив: Создать ZIP-файл — Создайте ZIP-архив из файлов

Создавайте Zip Файлы Онлайн (Без ограничений!)

  • ?

Инструкции приводятся ниже

 Видеоинструкция

Вот видео-руководство, чтобы показать вам, как сжимать файлы онлайн.

Ниже приведены шаги сжатия файлов с помощью ezyZip.

  1. Есть два способа добавить файлы в ваш zip архив:
  2. (Необязательно) Установите желаемый уровень сжатия, нажав на стрелку вниз рядом с «Архивировать файлы».

  3. Нажмите Кнопку ««Архивировать файлы». Начнется сжатие файлов.

  4. Нажмите кнопку «Сохранить файл архива», чтобы сохранить архив на локальном диске. Убедитесь, что вы указали допустимое имя файла.


Вы можете добавлять новые папки после создания исходного ZIP-архива (с файлами или без них).

  1. Нажмите «Новая папка» в правом верхнем углу.


  2. Дайте вашей новой папке имя и нажмите Enter или щелкните зеленую галочку.


  3. Папка будет добавлена к содержимому ZIP-архива.


  1. Кликните на лого Dropbox () на кнопке выбора файла.


  2. org/HowToStep»>

    Появится окно выбора файла в Dropbox. При первом запуске будет необходимо подтвердить доступ к ezyZip.

  3. Как только вы выберете файл(ы) — они появятся в списке. Следуйте инструкциям инструкции выше для сжатия файлов.

  4. Чтобы сохранить получившийся ZIP файл в Dropbox, кликните на «Dropbox» выбрав данный пункт из появляющегося под кнопкой «Сохранить Zip файл» кнопкой. В первый раз потребуется авторизация действия.

    Файл будет сохранен в папке /Apps/ezyZip.


ezyZip поддерживает любую ОС, которая может работать с современным браузером. Мы протестировали его для работы с Windows, MacOS, Linux (например, Ubuntu, Mint, Debian), Android, ChromeOS (Chromebook), Android, iOS (iPhone, iPad и iPod Touch).

Убедитесь, что вы используете последнюю версию одного из популярных браузеров или их вариации (например, Chrome, Firefox, Safari, Opera).

Расширение .zip — это наиболее распространенный формат архива, используемый в интернете для хранения множества файлов и каталогов в одном сжатом файле. Этим сжатым файлом можно легко делиться между пользователями (например, по электронной почте).

Представьте его как каталог, который может содержать файлы и другие подкаталоги после открытия его служебной программой zip. Он сжимает данные с использованием алгоритма без потерь, что означает отсутствие ухудшения качества файлов, как в некоторых форматах сжатия (например, mp3 или jpeg). Алгоритм сжатия может быть разным, но наиболее распространенным является DEFLATE. Стандарты сжатия постоянно развиваются с новыми алгоритмами, а параметры шифрования добавляются через регулярные промежутки времени.

ezyZip предлагает различные варианты управления zip файлами, включая сжатие отдельных файлов, создание zip папок, извлечение zip файлов и преобразование zip файлов.

ezyZip представляет собой онлайн-инструмент для сжатия и распаковки архивов, которое позволяет упаковывать файлы в архив. Он также поддерживает распаковку, что позволяет распаковывать zip-файлы.

В отличие от традиционных онлайн-утилит создания и распаковки архивов, при использовании ezyZip не требуется загружать файлы на сервер или скачивать файлы с сервера. Он работает локально как приложение HTML5/javascript в браузере, благодаря чему он работает гораздо быстрее, чем другие аналогичные онлайн-инструменты создания и распаковки архивов.

Как сделать ZIP архив

Содержание

  1. 1. Создайте ZIP архив с помощью контекстного меню Windows
  2. 2. Используйте проводник для создания ZIP-файлов в Windows
  3. 3. Используйте командную строку Windows для создания ZIP-файлов
  4. 4. Программы для создания ZIP-файла в Windows
  5. 5. Добавьте файлы в существующий ZIP-файл в Windows
  6. 6. Как распаковать ZIP-файлы в Windows
  7. Извлекайте ZIP архивы с помощью проводника
  8. Извлечение ZIP архива с помощью командной строки
  9. Сжатие файлов в Windows

В этой статье рассмотрено 6 способов как сделать zip архив в Windows 10. Если хотите сделать ZIP-файл на Windows 10 а не знаете как, тогда вот самые простые способы создания архивных папок.

Вы хотите создать ZIP-архив на своем компьютере с Windows? Существуют различные причины, по которым вы хотели бы сделать это. Может быть, вы хотите объединить несколько файлов в один архив? Или, может быть, вы хотите уменьшить размер ваших файлов, сжимая их в ZIP-архиве?Независимо от причины, существуют встроенные и сторонние опции создания ZIP-файла в Windows. Вот шесть простых способов создания ZIP архива в Windows 10.

Один из самых простых способов создать ZIP файл на вашем ПК. Это использовать контекстное меню. В этом меню есть опция, которая позволяет добавлять выбранные файлы в ZIP-архив.

Для этого не нужно устанавливать какие-либо расширения или приложения. Эта функция доступна сразу после установки Windows 10.

Вы можете использовать эту опцию для добавления одного файла, нескольких файлов и даже папок в новый ZIP-архив. Вот как вы его используете:

архив с помощью контекстного меню Windows
  1. Откройте папку где находятся файлы, которые вы хотите добавить в ZIP-файл.
  2. Выберите отдельные файлы, щелкнув по ним щелчком мыши. Или используйте горячие клавиши CTRL + A, чтобы выбрать все файлы в этой папке.
  3. Щелкните правой кнопкой мыши на любом файле и выберите «Отправить». В открывшемся контекстном меню выберите «Сжатая ZIP-папка».
  4. Windows создаст новый ZIP-архив с выбранными вами файлами.

Этот новый ZIP-архив помещается в ту же папку, что и ваши исходные файлы.

2. Используйте проводник для создания ZIP-файлов в Windows

Еще один встроенный способ создания ZIP-файла в Windows — это использование проводника файлов. Этот способ работает почти так же, как и пункт контекстного меню. И вы можете использовать его для добавления файлов и папок в новый ZIP-архив.

Используйте проводник для создания ZIP-файлов в Windows

Вот как можно найти и воспользоваться этой функцией архивации:

  1. Откройте окно проводника файлов и откройте папку, в которой находятся ваши файлы.
  2. Выберите файлы, которые вы хотите добавить в ZIP-архив.
  3. Перейдите на вкладку с надписью Поделиться, которая находится в верхней части окна Проводника.
  4. Вы увидите опцию с надписью Сжать. Выберите этот параметр.
  5. Windows пойдет дальше и создаст для вас ZIP-архив. Не будет никаких подсказок или подтверждений.

3. Используйте командную строку Windows для создания ZIP-файлов

Если вы являетесь фанатом командной строки. Тогда этот способ точно для вас. Так как он полностью описывает метод создания Zip архива через командную строку.

Хочу заметить, что эта команда работает только в Windows 10.

В Windows 10 есть команда tar, которая помогает создавать или извлекать архивы на вашем компьютере. Вы можете использовать эту команду для добавления существующих файлов в ZIP-архив.

CMD для создания ZIP-файлов
  1. Откройте окно командной строки на вашем компьютере.
  2. Используйте команду cd, чтобы перейти в папку, в которой находятся ваши файлы.
  3. Введите следующую команду в окне командной строки и нажмите Enter.

    tar.exe -a -c -f output.zip myfile.txt

    Заменить output.zip на любове другое имя, которое вы хотите дать своему ZIP-файлу.
    myfile.txt файл который вы хотите добавить в ZIP-файл.

  4. Командная строка создаст и сохранит ZIP-архив в текущем рабочем каталоге.

4. Программы для создания ZIP-файла в Windows

Windows 10 позволяет создавать ZIP-архивы без каких-либо приложений. Но эти возможности довольно ограничены и не совсем удобны. Если вам нужны дополнительные опции, такие как возможность выбрать уровень сжатия и разделить архив на несколько частей. Тогда вам потребуется скачать и установить дополнительные программы. Например:

7-Zip (free) это сторонний инструмент архивирования. Который вы можете использовать для создания, а также извлечения разных типов архивов на вашем компьютере. Эта программа предлагает такие опции, как разбитие архивов и добавление к ним защиты паролем. А так же многое другое.

Если вам интересны все функции 7-zip, напишите в комментарии,а я сделаю для вас подробный обзор с подробным описанием.

Программы для создания ZIP-файла в Windows

Краткая инструкция для создания ZIP-файла через команду 7-zip:

  1. Установите приложение 7-Zip на свой компьютер.
  2. Откройте приложение, и в нем появятся ваши файлы. Так как в 7-zip свой файловый менеджер.
  3. Используя этот менеджер, откройте папку, в которой находятся ваши файлы.
  4. Выберите файлы, которые вы хотите добавить в свой ZIP-архив.
  5. Нажмите кнопку Добавить на верхней панели инструментов.
  6. Укажите папку где создать Zip архив, далее формат архива, уровень сжатия, при необходимости пароль для вашего ZIP-архива. Затем нажмите кнопку ОК в нижней части экрана.
  7. 7-Zip создаст и сохранит архив в выбранной вами папке.

5. Добавьте файлы в существующий ZIP-файл в Windows

Если вы вдруг забыли добавить некоторые файлы при создании ZIP-архива. Не беспокойтесь, вы можете добавить файлы в существующий архив без каких-либо хлопот. Вам даже не нужна дополнительная программа. Вот что нужно сделать чтоб изменить существующий ZIP-архив:

  1. Откройте папку, в которой находится ваш ZIP-архив.
  2. В другом окне откройте папку с файлами которые вы забыли заархивировать.
  3. Теперь просто перетащите файлы в ZIP-архив.
  4. Теперь ваши файлы будут добавлены в ваш архив.

6. Как распаковать ZIP-файлы в Windows

В ОС Windows 10 можно извлечь файлы как через командную строку так и с помощью контекстного меню.

Здесь мы покажем, как извлечь архивы:

Извлечение архива с помощью проводника
  1. Найдите ZIP-архив, который вы хотите извлечь.
  2. Чтобы извлечь один файл, дважды щелкните на архив и перетащите файл, который вы хотите извлечь, в папку в Проводнике.
  3. Чтобы извлечь все файлы, щелкните правой кнопкой мыши по ZIP-архиву и выберите пункт «Извлечь все».
Как распаковать ZIP-файлы в Windows с помощью командной строки
  1. Откройте командную строку (cmd) и перейдите в каталог, где находится ZIP-архив.
  2. Введите следующую команду заменяя myarchive.zip, на имя вашего архива. Далее нажмите Enter.

    tar.exe -xf myarchive.zip

  3. Командная строка распакует ваш архив в текущем рабочем каталоге.

Сжатие файлов в Windows

Пользователю Windows не нужно прилагать много усилий, чтобы сделать архивы на компьютере. Просто выберите файлы, которые вы хотите включить в свой архив, нажмите на нужную кнопку и ваш ZIP-архив будет готов.

Как архивировать файлы в Linux

(Изображение предоставлено Tom’s Hardware)

В этом практическом руководстве мы рассмотрим команду zip , полезную утилиту, которая позволяет нам указывать списки файлов, устанавливать уровень сжатия данных и создавать сжатые архивы.

Пока вы привыкнете к этим командам, полезно работать с примерами тестовых файлов и каталогов, и вы должны проявлять особую осторожность, чтобы точно следовать инструкциям.

Все команды в этом руководстве будут работать на большинстве машин Linux. Мы использовали установку Ubuntu 20.04, но вы можете запустить это руководство на Малина Пи . Все инструкции выполняются через Терминал. Вы можете открыть окно терминала на большинстве машин Linux, нажав ctrl, alt и t.

Создание Zip-архива в Linux

(Изображение предоставлено Tom’s Hardware)

Для начала давайте создадим несколько пустых тестовых файлов, а затем добавим их в архив. Мы будем использовать команду

touch для создания файлов, команду ls для проверки того, что файлы были созданы, а затем zip команда для создания базового архива.

1. Создайте тестовую директорию , где мы сможем безопасно опробовать команду. Измените каталог, чтобы вы находились внутри нового каталога.

 мкдир test_directory
cd test_directory 

2. Создайте несколько тестовых файлов для добавления в наш архив. Обратите внимание на 3 разных суффикса файлов.

 $ сенсорный test1. txt test2.h test3.c
 

3. Список файлов для проверки правильности их создания.

 ls 

4. С помощью команды zip создайте ZIP-архив вновь созданных файлов. Чтобы создать ZIP-архив, мы просто используем команду

zip , за которой следует имя, которое мы даем архиву, а затем список файлов, которые мы хотим включить в архив. Следующая команда создаст ZIP-архив с именем test_archive.zip , и этот архив будет включать три тестовых файла. Обратите внимание, что нам не нужно добавлять суффикс архива .zip на имя архива при использовании команды zip .

 zip test_archive test1.txt test2.h test3.c
 

5. Убедитесь, что ZIP-архив создан.

 лс
 

Создание ZIP-архива с выбором только определенных типов файлов

(Изображение предоставлено Tom’s Hardware)

Команде zip можно предоставить аргументы, которые добавляют в архив только определенные типы файлов. Это мощная функция, которая эффективно реализуется в командной строке.

1. Удалите все предыдущие тестовые архивы

и убедитесь, что у вас все еще есть исходные три тестовых файла. Обратите внимание, что, в отличие от создания ZIP-архива, при ссылке на существующий архив необходимо указывать расширение файла .zip.

 РМ test_archive.zip
лс
 

2. Создайте новый ZIP-архив, содержащий только тестовые файлы, заканчивающиеся на .h и .c . После создания архива, если вы проверите его содержимое, он будет содержать только файлы test2.h и test3.c и не будет содержать test1.txt.

 zip test_archive *.h *.c
 

3. Для проверки содержимого используйте без .

 меньше test_archive.zip
 

(Изображение предоставлено Tom’s Hardware)

Создайте ZIP-архив, содержащий каталог

(Изображение предоставлено Tom’s Hardware)

Часто нам нужно создать ZIP-архив, содержащий каталоги, содержащие файлы, мы можем сделать это, добавив рекурсивный аргумент

-r на команду zip .

1. Удалить архивы внутри каталога test_directory, но сохранить остальные файлы. Во избежание путаницы было бы неплохо удалить архивы, оставив только исходные файлы, которые мы создали.

 РМ test_archive.zip
 

2. Поднимитесь на один каталог вверх и убедитесь, что вы не находитесь внутри каталога для архивирования. Мы не можем находиться внутри каталога, который хотим добавить в архив.

 компакт-диск
pwd
 

3. Создайте ZIP-архив, содержащий каталог test_directory и его содержимое. Обратите внимание, что при создании архива с использованием аргумента -r вы видите подробные выходные данные с подробным описанием каждого этапа команды, когда она спускается в каталог и архивирует файлы и папку.

 zip -r новый_архив тестовый_каталог
 

4. Создайте еще один аналогичный ZIP-архив, используя команду -q (тихий) аргумент для отключения подробного вывода. Вы должны увидеть, что на этот раз терминалу не сообщается о шагах по созданию этого архива. Затем используйте ls , чтобы проверить, был ли создан новый архив.

 zip -r -q новый_архив2 тестовый_каталог
лс
 

Изменение уровня сжатия данных для ZIP-архива

(Изображение предоставлено Tom’s Hardware)

По умолчанию команда zip использует значение сжатия 6, взятое из диапазона 0-9где 0 — несжатый файл, а 9 — максимально допустимый уровень сжатия. Мы можем просто добавить числовой аргумент, чтобы изменить уровень сжатия.

1. Добавить случайные данные в тестовые файлы. Сейчас наши тестовые файлы test1.txt, test2.h и test3.c пусты. У них ноль байтов данных, но мы можем добавить случайные «мусорные данные» в файлы, используя быструю команду терминала, которая выгрузит 64 МБ в каждый файл.

 компакт-диск test_directory
head -c 64M  test1.txt
head -c 64M  test2.h
head -c 64M  test3. c
 

2. Вернитесь в родительский каталог и создайте новый ZIP-архив с уровнем сжатия по умолчанию 6.

 cd
zip -r -q архив_по умолчанию_сжатие тестовый_каталог
 

3. Создайте другой архив с тем же содержимым, но увеличьте уровень сжатия до 9. Проверьте детали нового архива и предыдущего архива, используя ls -l , вы должны увидеть, что размер нового архива меньше, чем в предыдущем архиве, так как было увеличено сжатие данных.

$ zip -r -q -9 сжатый архив_каталог_теста $ лс -л

(Изображение предоставлено Tom’s Hardware)

Мы создадим ZIP-архив с именем test_archive.zip , который содержит каталог test_directory , который, в свою очередь, содержит 3 пустых тестовых файла: test1.txt, test2.h, test3. с . Чтобы распаковать этот архив, мы будем использовать команду unzip .

1. Создайте тестовую папку, содержащую тестовые файлы. После создания тестового каталога и файлов проверьте, что файлы были созданы с помощью ls перед возвратом в родительский каталог.

 мкдир test_directory
cd test_directory
сенсорный test1.txt test2.h test3.c
лс
CD
 

2. Создайте ZIP-архив с именем test_archive.zip , который содержит test_directory.

Проверить успешность создания архива с помощью ls. Команда zip имеет два аргумента: имя архива, который мы хотим создать, и источник файлов, которые нужно поместить в архив.

 zip -r test_archive test_directory
лс
 

3. Удалить неархивированный каталог. Если мы извлечем test_archive.zip в родительский каталог, который содержит test_directory , нас спросят, хотим ли мы заменить или переименовать архив.

 rm -r test_directory
 

4. Разархивируйте файл test_archive.zip . С помощью команды unzip без дополнительных аргументов мы видим подробный отчет о каждом шаге распаковки архива.

 распаковать test_archive.zip
 

(Изображение предоставлено Tom’s Hardware)

Часто нам нужно извлечь архив в другое указанное место. Для этого мы можем добавить аргумент -d к команде unzip .

1. Распакуйте test_archive.zip в указанный каталог. Мы можем указать относительное или абсолютное местоположение. В этом примере мы извлекаем содержимое в каталог Music, используя относительный путь. Мы также можем передать абсолютный путь, который обеспечивает полный путь к целевому местоположению. После распаковки архива перейдите в указанный каталог и используйте ls для проверки извлечения архива.

 распаковать test_archive.zip -d ./Музыка
 

2. Измените каталог и перечислите содержимое, чтобы убедиться, что файлы извлечены правильно.

 компакт-диск Музыка
лс
 

С помощью этих нескольких основных применений команды zip теперь у вас есть множество опций при создании ZIP-архивов в терминале Linux. Возможность выбора определенных типов файлов и возможность установки уровня сжатия в эмуляторе терминала обеспечивает быстрый доступ к этим мощным инструментам, которые часто трудно найти в приложении с графическим интерфейсом.

Джо Хинчлифф (Jo Hinchliffe) — внештатный автор из Великобритании для Tom’s Hardware US. Его тексты сосредоточены на учебниках по командной строке Linux.

Темы

Linux

Операционные системы

python — Как создать zip-архив каталога?

Задавать вопрос

спросил

12 лет, 11 месяцев назад

Изменено 4 месяца назад

Просмотрено 633 тыс. раз

Как я могу создать 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()
 

Здесь так много ответов, и я надеюсь, что смогу внести свой вклад со своей собственной версией, которая основана на исходном ответе (кстати), но с более графической точки зрения, также с использованием контекста для каждого zip-файла установки и сортировки 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 , а затем повторяю итерацию по файлам , который представляет собой список файлов из корня каталог, формируя относительный путь для каждого файла на основе текущего корневого каталога , добавляя к запущенному контексту 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() для индексации структуры каталогов.

Вот вариант ответа, данного 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__":
    главный()
 

Для большей гибкости, т.е. выберите каталог/файл по имени используйте:

 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

Допустим, вы хотите заархивировать все папки (подкаталоги) в текущем каталоге.

 для корня, каталогов, файлов в 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.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *