Работа с zip-архивами в Python, модуль zipfile
Модуль zipfile (входит в стандартный набор python) позволяет работать с zip-архивами. Чтобы записать или прочитать содержимое zip-файла, прежде всего необходимо создать объект ZipFile . Объекты ZipFile похожи на объекты File , возвращаемые функцией open() .
ZipFile(filename [,mode[,compression[,allowZip64]]])
- filename — имя файла zip архива.
- mode
- ‘r’ — файл будет открыт для чтения (это режим по умолчанию);
- ‘w’ — файл будет открыт для записи; если файл не существует, он будет создан; если файл существует, он будет перезаписан;
- ‘a’ — существующий файл будет открыт в режиме добавления файлов в архив.
Создание архива, запись файлов и директорий:
>>> import os, zipfile >>> os.chdir('C:\\example') >>> os.listdir() ['images', 'readme.txt'] >>> zipFile = zipfile.ZipFile('archive.zip', 'w', zipfile.ZIP_DEFLATED) >>> zipFile.write('readme.txt') [grn]# добавляем файл в архив[/grn] >>> zipFile.write('images') [grn]# добавляем (пустую) директорию в архив[/grn] >>> zipFile.write('images\\1.jpg') >>> zipFile.write('images\\2.jpg') >>> zipFile.close()
Получение информации о содержимом zip-архива:
>>> zipFile = zipfile.ZipFile('archive.zip', 'r') >>> zipFile.namelist() [grn]# получаем информацию о файлах и директориях[/grn] ['readme.txt', 'images/', 'images/1.jpg', 'images/2.jpg'] >>> zipInfo = zipFile.getinfo('readme.txt') [grn]# получаем информацию об отдельном файле[/grn] >>> zipInfo.file_size 13908 >>> zipInfo.compress_size 3828 >>> zipFile.close()
Извлечение файлов из архива:
>>> zipFile = zipfile.ZipFile('archive.zip', 'r') >>> zipFile.extract('readme.txt') [grn]# извлекаем отдельный файл из корня архива[/grn] 'C:\\example\\readme.txt' >>> zipFile.extract('images/1.jpg') [grn]# извлекаем отдельный файл из директории images[/grn] 'C:\\example\\images\\1.jpg' >>> zipFile.extractall() [grn]# извлекаем весь архив в текущую директорию[/grn] >>> zipFile.extractall('archive') [grn]# извлекаем весь архив в директорию archive[/grn] >>> zipFile.close()
Функция zipfile.is_zipfile() проверяет, является ли файл архивом или нет. Если да, то она вернет True , если нет — False .
# Копирует директорию со всем ее содержимым в # zip-файл с инкрементным номером в имени файла import zipfile, os def backupToZip(source, backup): """Создание резервной копии всего содержимого директории source""" # Проверить, что обе директории существуют if not (os.path.isabs(source) and os.path.isdir(source)): print('Директория %s не существует' % (source)) return if not (os.path.isabs(backup) and os.path.isdir(backup)): print('Директория %s не существует' % (backup)) return # Определить, какое имя файла будет у zip-архива, # исходя из имен уже существующих файлов number = 1 while True: name = os.path.basename(source) + '-' + str(number) + '.zip' backupFile = os.path.join(backup, name) if not os.path.isfile(backupFile): break number = number + 1 # Создание нового zip-файла print('Создание нового zip-файла %s. ' % (backupFile)) zipFile = zipfile.ZipFile(backupFile, 'w') # Обход всего дерева директории и сжатие файлов в каждой папке archDirName = '' for dir, subdirs, files in os.walk(source): print('Добавление файлов из директории %s. ' % (dir)) # Имя текущей директории в архиве archDirName = '/'.join([archDirName, os.path.basename(dir)]).strip('/') # Добавить в архив текущую директорию zipFile.write(dir, archDirName) # Добавить в архив все файлы из текущей директории for file in files: # Имя текущего файла в архиве archFileName = archDirName + '/' + file zipFile.write(os.path.join(dir, file), archFileName) zipFile.close() print('Готово') backupToZip('C:\\project', 'C:\\backup')
- Запуск других программ из Python
- Работа с потоками в Python
- Работа с датой и временем в Python
- Работа с файлами MS Word в Python
- Работа с файлами Excel в Python
- Модуль Selenium, управление браузером
- Парсинг сайтов, модуль Beautiful Soup
Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Категории блога
Облако тегов- 1С:Предприятие (31)
- API (29)
- Bash (43)
- CLI (126)
- CMS (139)
- CSS (50)
- Frontend (75)
- HTML (66)
- JavaScript (150)
- Laravel (72)
- Linux (174)
- MySQL (76)
- PHP (125)
- React.js (66)
- SSH (27)
- Ubuntu (70)
- Web-разработка (509)
- WordPress (73)
- Yii2 (69)
- БазаДанных (95)
- Битрикс (66)
- Блог (29)
- Верстка (43)
- ИнтернетМагаз… (84)
- КаталогТоваров (87)
- Класс (30)
- Клиент (29)
- Ключ (28)
- Команда (88)
- Компонент (60)
- Конфигурация (72)
- Корзина (32)
- ЛокальнаяСеть (33)
- Модуль (34)
- Навигация (31)
- Настройка (148)
- ПанельУправле… (29)
- Плагин (33)
- Пользователь (26)
- Практика (101)
- Сервер (82)
- Событие (28)
- Теория (106)
- Установка (72)
- Файл (51)
- Форма (58)
- Фреймворк (192)
- Функция (36)
- ШаблонСайта (68)
Просмотр ZIP-файлов с помощью REST API в Python
Мы можем хранить один или несколько файлов или папок, сжатых в ZIP-файле, чтобы они действовали как один файл. ZIP-архив экономит место на диске и повышает производительность компьютеров. Это также позволяет нам эффективно переносить наши файлы и папки в ZIP-архиве из одного места в другое. В этой статье мы узнаем, как просматривать содержимое ZIP-файлов с помощью REST API в Python.
В этой статье должны быть раскрыты следующие темы:
- Средство просмотра ZIP-файлов REST API и Python SDK
- Просмотр ZIP-файлов в HTML с использованием REST API в Python
- Просмотр определенной папки из ZIP-архивов в HTML
- Визуализировать содержимое ZIP-файлов в PDF
- Преобразование ZIP-архивов в JPG
- Получить список файлов и папок из ZIP-архивов
Средство просмотра ZIP-файлов REST API и Python SDK#
Для рендеринга ZIP-архивов мы будем использовать Python SDK of GroupDocs.Viewer Cloud API. Это позволяет нам программно отображать все виды популярных форматов документов. Пожалуйста, установите его с помощью следующей команды в консоли:
pip install groupdocs-viewer-cloud
Пожалуйста, получите свой идентификатор клиента и секрет из панели инструментов, прежде чем выполнять указанные шаги. Получив свой идентификатор и секрет, добавьте код, как показано ниже:
# В этом примере кода показано, как добавить идентификатор клиента и секрет в код. client_id = "659fe7da-715b-4744-a0f7-cf469a392b73" client_secret = "b377c36cfa28fa69960ebac6b6e36421" configuration = groupdocs_viewer_cloud.Configuration(client_id, client_secret) configuration.api_base_url = "https://api.groupdocs.cloud" my_storage = ""
Просмотр ZIP-файлов в HTML с использованием REST API в Python#
Мы можем отображать ZIP-архивы в HTML, выполнив простые шаги, указанные ниже:
- Загрузить ZIP-файл в облако
- Преобразование ZIP в HTML
- Скачать визуализированный HTML-файл
Загрузите ZIP-файл#
Во-первых, мы загрузим ZIP-файл в облако, используя приведенный ниже пример кода:
# В этом примере кода показано, как загрузить ZIP-файл в облако. # Создайте экземпляр API file_api = groupdocs_viewer_cloud.FileApi.from_config(configuration) # Запрос на загрузку файла request = groupdocs_viewer_cloud.UploadFileRequest("sample.zip", "C:\\Files\\Viewer\\sample.zip", my_storage) # Загрузить файл response = file_api.upload_file(request)
В результате загруженный файл будет доступен в разделе файлов панели управления в облаке.
Рендеринг ZIP в HTML на Python#
Теперь мы просмотрим содержимое загруженного ZIP-архива в браузере, выполнив следующие действия:
- Во-первых, создайте экземпляр ViewAPI.
- Затем определите параметры просмотра и укажите путь к загруженному ZIP-файлу.
- Затем установите вид\формат как «HTML».
- При необходимости установите для параметра render\to\single\page значение True.
- После этого создайте CreateViewRequest с параметрами просмотра в качестве аргумента.
- Наконец, преобразуйте ZIP в HTML, используя метод create\view().
В следующем примере кода показано, как отобразить ZIP-файл в HTML с помощью REST API в Python.
# В этом примере кода показано, как преобразовать ZIP-файл в HTML. # Инициализация API apiInstance = groupdocs_viewer_cloud.ViewApi.from_keys(client_id, client_secret) # Определить параметры просмотра view_options = groupdocs_viewer_cloud.ViewOptions() view_options.file_info = groupdocs_viewer_cloud.FileInfo() view_options.file_info.file_path = "sample.zip" view_options.view_format = "HTML" # Определить параметры HTML view_options.render_options = groupdocs_viewer_cloud.HtmlOptions() view_options.render_options.render_to_single_page = True # Создать запрос на просмотр request = groupdocs_viewer_cloud.CreateViewRequest(view_options) response = apiInstance.create_view(request) # Показать результаты for page in response.pages: print("Document path: " + page.path)
Загрузите визуализированный файл#
Приведенный выше пример кода сохранит обработанный HTML-файл в облаке. Его можно загрузить с помощью следующего примера кода:
# В этом примере кода показано, как загрузить визуализированный файл из облака. # Инициализация API file_api = groupdocs_viewer_cloud.FileApi.from_config(configuration) # Создать запрос на скачивание файла request = groupdocs_viewer_cloud.DownloadFileRequest("viewer\\sample_zip\\sample_page_1.html", my_storage) # Загрузить файл response = file_api.download_file(request) # Переместите загруженный файл в свой рабочий каталог shutil.move(response, "C:\\Files\\Viewer\\")
Просмотр определенной папки из ZIP-архивов в HTML#
Мы также можем просмотреть только определенную папку из ZIP-файла в браузере, выполнив следующие действия:
- Во-первых, создайте экземпляр ViewAPI.
- Затем определите параметры просмотра и укажите путь к загруженному ZIP-файлу.
- Затем установите вид\формат как «HTML».
- Затем определите ArchiveOptions и укажите имя папки для рендеринга.
- После этого создайте CreateViewRequest с параметрами просмотра в качестве аргумента.
- Наконец, визуализируйте определенную папку из ZIP в HTML, используя метод create\view().
В следующем примере кода показано, как отобразить определенную папку из ZIP-файла в HTML с помощью Python.
# В этом примере кода показано, как преобразовать определенную папку из ZIP-файла в HTML. # Инициализация API apiInstance = groupdocs_viewer_cloud.ViewApi.from_keys(client_id, client_secret) # Определить параметры просмотра view_options = groupdocs_viewer_cloud.ViewOptions() view_options.file_info = groupdocs_viewer_cloud.FileInfo() view_options.file_info.file_path = "sample.zip" view_options.view_format = "HTML" view_options.render_options = groupdocs_viewer_cloud.HtmlOptions() # Определить параметры архива view_options.render_options.archive_options = groupdocs_viewer_cloud.ArchiveOptions() # Установить имя папки view_options.render_options.archive_options.folder = "ThirdFolderWithItems" # Создать запрос на просмотр request = groupdocs_viewer_cloud.CreateViewRequest(view_options) response = apiInstance.create_view(request) # Сделанный for page in response.pages: print("Document path: " + page.path)
Визуализировать содержимое ZIP-файлов в PDF#
Мы можем преобразовать содержимое ZIP-файла в PDF-документ, выполнив простые шаги, указанные ниже:
- Во-первых, создайте экземпляр ViewAPI.
- Затем определите параметры просмотра и укажите путь к загруженному ZIP-файлу.
- Затем установите вид\формат как «PDF».
- После этого создайте CreateViewRequest с параметрами просмотра в качестве аргумента.
- Наконец, преобразуйте содержимое из ZIP в PDF, используя метод create\view().
В следующем примере кода показано, как визуализировать содержимое ZIP-файла в формате PDF с помощью REST API в Python.
# В этом примере кода показано, как преобразовать ZIP-файл в PDF. # Инициализация API apiInstance = groupdocs_viewer_cloud.ViewApi.from_keys(client_id, client_secret) # Определить параметры просмотра view_options = groupdocs_viewer_cloud.ViewOptions() view_options.file_info = groupdocs_viewer_cloud.FileInfo() view_options.file_info.file_path = "sample.zip" view_options.view_format = "PDF" # Создать запрос на просмотр request = groupdocs_viewer_cloud.CreateViewRequest(view_options) response = apiInstance.create_view(request) # Показать путь к файлу print("Document path: " + response.file.path)
Преобразование ZIP-архивов в JPG#
Мы также можем визуализировать содержимое ZIP-файла в виде изображения JPG, выполнив следующие шаги:
- Во-первых, создайте экземпляр ViewAPI.
- Затем определите параметры просмотра и укажите путь к загруженному ZIP-файлу.
- Затем установите формат просмотра «JPG».
- После этого создайте CreateViewRequest с параметрами просмотра в качестве аргумента.
- Наконец, преобразуйте ZIP в JPG, используя метод create\view().
В следующем примере кода показано, как преобразовать ZIP-файл в изображение JPG с помощью REST API в Python.
# В этом примере кода показано, как преобразовать ZIP-файл в JPG. # Инициализация API apiInstance = groupdocs_viewer_cloud.ViewApi.from_keys(client_id, client_secret) # Определить параметры просмотра view_options = groupdocs_viewer_cloud.ViewOptions() view_options.file_info = groupdocs_viewer_cloud.FileInfo() view_options.file_info.file_path = "sample.zip" view_options.view_format = "JPG" # Создать запрос на просмотр request = groupdocs_viewer_cloud.CreateViewRequest(view_options) response = apiInstance.create_view(request) # Показать путь к файлу print("Document path: " + response.file.path)
Получить список файлов и папок из ZIP-архивов#
Мы можем получить список всех файлов и папок из ZIP-архива, выполнив следующие действия:
- Во-первых, создайте экземпляр InfoAPI.
- Затем определите параметры просмотра и укажите путь к загруженному ZIP-файлу.
- После этого создайте GetInfoRequest с параметрами просмотра в качестве аргумента.
- Наконец, перечислите содержимое ZIP-файла, используя метод get\info().
В следующем примере кода показано, как получить список файлов и папок из ZIP-файла в Python.
# В этом примере кода показано, как составить список файлов и папок в ZIP-файле. # Инициализация API apiInstance = groupdocs_viewer_cloud.InfoApi.from_keys(client_id, client_secret) # Определить параметры просмотра view_options = groupdocs_viewer_cloud.ViewOptions() view_options.file_info = groupdocs_viewer_cloud.FileInfo() view_options.file_info.file_path = "sample.zip" # Создать запрос на получение информации request = groupdocs_viewer_cloud.GetInfoRequest(view_options) # Получить данные response = apiInstance.get_info(request) # Список папок folders = response.archive_view_info.folders for folder in folders: print(folder) # Список файлов for attachment in response.attachments: print(attachment.name)
Попробуйте онлайн#
Пожалуйста, попробуйте следующий бесплатный онлайн-инструмент для рендеринга ZIP, разработанный с использованием вышеуказанного API. https://products.groupdocs.app/viewer/zip
Заключение#
В этой статье мы узнали, как:
- визуализировать ZIP-архив или определенную папку из ZIP в HTML в Python;
- просматривать содержимое ZIP-файла в формате PDF;
- конвертировать ZIP-архивы в JPG;
- список файлов и папок ZIP-архива;
- программно загрузить ZIP-файл в облако;
- загрузите обработанный HTML-файл из облака.
Кроме того, вы можете узнать больше об облачном API GroupDocs.Viewer с помощью документации. Мы также предоставляем раздел Справочник по API, который позволяет визуализировать наши API и взаимодействовать с ними непосредственно через браузер. В случае возникновения каких-либо неясностей, пожалуйста, свяжитесь с нами на форуме.
Смотрите также#
- Визуализация данных Excel в HTML с использованием REST API в Python
- Рендеринг данных проекта из MPP в PDF с использованием REST API в Python
- GroupDocs.Viewer Cloud Product Family
- Render ZIP to HTML in Python
- Render ZIP to JPG in Python
- Render ZIP to PDF in Python
- View ZIP Files in HTML
- Viewer API
REST API. Настройки модуля
Форма настроек модуля REST API (Настройки > Настройки продукта > Настройки модулей > REST API) предназначена для задания параметров модуля.
Закладка Настройки
Поле Описание Модуль mod_zip включен и настроен (требуется для экспорта) При отмеченной опции для экспорта архива приложения будет использоваться модуль mod_zip mod_zip — HTTP-модуль для NGINX, динамически собирающий ZIP-архивы. В простых конфигурациях mod_zip берет список файлов в локальной файловой системе и обслуживает их как один ZIP-архив. В более сложных настройках mod_zip может передавать файлы компонентов с вышестоящих серверов с помощью собственного прокси-кода NGINX. В отличие от многих сценариев создания ZIP, этот процесс никогда не занимает больше нескольких КБ ОЗУ, даже при сборке архивов, размер которых (потенциально) составляет сотни мегабайт. Закладка Логирование
Поле Описание Активность логирования Выполняется активация или отключение логирования. Включить логирование Устанавливается (выбирается из списка) время, на которое нужно включить лог использования RESTа. Удалить собранные ранее данные Выполняется удаление данных, собранных при предыдущем включении логирования. Собрано данных При нажатии на ссылку-число собранных данных можно просмотреть более подробный лог использования RESTа. Настройки фильтрации Идентификатор клиента (client_id) Новинки документации в соцсетях:
Пользовательские комментарии
Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.
Для этого нужно всего лишь авторизоваться на сайте
Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.
Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
Работа с zip архивами в .NET
Недавно мне в моем .NET/С# проекте подребовался функционал создания и распаковки zip архивов. Казалось бы, очень простые операции, учитывая что Windows Explorer уже давно умеет работать с zip файлами и я предположил, что API для работы с ними Microsoft предоставляет.
Отсутствие классов для работы с zip в .NET фреймворк большим сюрпризом для меня не стало, но и не сильно обрадовало. Отсутствие функционала для работы с zip в различных unmanaged API Windows (WinAPI, COM интерфейсы и т.д) меня раздосадовало. На данный момент весь исходный код проекта разработан мной и включать дополнительный third-party .dll файл в дистрибутив из за простейшего функционала мне не хотелось.
- В .NET Framework есть класс System.IO.Packaging.ZipPackage, но как я понял, полноценно работать с zip архивами при помощи него нельзя и к тому же он появился только в .NET 3.5, привязывать к которому свой проект мне не очень то хотелось. Это класс использует класс MS.Internal.IO.Zip.ZipArchive, но, как видно из названия, доступ к нему закрыт. Интересно, почему.
- В .NET Framework для J# присутствует класс java.util.zip.ZipFile и на MSDN есть статья, как использовать его из C#. Но Visual J# Framework не входить в состав .NET Framework, соответственно нужно включать Visual J# Redistributable Package в свой дистрибутив, а это 3.6 мегабайта в общем то бесполезного для меня кода. Не слишком элегантно.
- minizip — надстройка над zlib, написан на Cи. Для использования в .NET потребуется dll сборка + interop.
- Third-party библиотеки SharpZipLib и DotNetZip. Обе полностью написаны и предоставляют достаточно широкий функционал.
Ни один из вышеперечисленных вариантов полностью меня не устраивал, и я решил разработать свой. В .NET Framework есть класс System.IO.Compression.DeflateStream, который умеет упаковывать и распаковывать данные на основе алгоритма deflate. Требуется только уметь читать/писать внутреннюю структуру zip архива, которая описана в спецификации.
- Поддерживает только алгоритм сжатия deflate и, конечно, store.
- Умеет работать с архивами содержащими именама файлов в utf8.
- Нормально распаковывает zip архивы созданные WinRAR, и, вероятно, многими другими программами под Windows. Неподдерживаемые моей библиотекой zip архивы мне также встречались
Я не ставил задачу разработать open source библиотеку, с документацией и удобным API. Я лишь хотел рассказать и привести пример работы с ZIP из .NET без использования сторонних библиотек.
Скачать исходники и пример можно здесь.
Буду рад если кому нибудь пригодится:)