В python 3.5 есть очень полезный модуль — zipfile. С помощью него можно читать zip-архивы, а что самое главное — создавать новые. Мне для одной темы понадобилось создавать архивы массово, по 20 файлов в архиве. И для решения этой задачи я как раз и воспользовался библиотекой zipfile. В этой статье я покажу примеры использования zipfile в python.
Как установить модуль zipfile
У меня стоит версия питона 3.5 и модуль zipfile входит в его состав. Для его вызова достаточно написать привычное import zipfile. Если в вашей версии питона нет этой библиотеки, то ее можно установить через pip или easy install.
Как создать zip-архив
Импортируем модуль, создаем, закрываем файл. Код:
1 2 3 | import zipfile #подключаем модуль newzip=zipfile.ZipFile(r'C:\bdseoru.zip','w') #создаем архив newzip.close() #закрываем архив |
На экран естественно ничего не появится, тут нет print. Если хотите увидеть что все ок — добавьте print, а еще лучше — воспользуйтесь исключениями.
1 2 3 4 5 6 7 8 | import zipfile #подключаем модуль try: newzip=zipfile.ZipFile(r'C:\bdseoru.zip','w') #создаем архив print("Архив bdseoru.zip на диске С:/ создан.") newzip.close() #закрываем архив except: print("Что-то пошло не так...") |
Результат — на диске С появился архив размером 22 байта.
Как добавить файлы в zip-архив через python
1 2 3 4 5 6 | import zipfile #подключаем модуль zname=r'D:\bdseoru.zip' #создаем переменную - название и местоположение файла newzip=zipfile.ZipFile(zname,'w') #создаем архив newzip.write(r'D:\kakzarabotat_milion.txt') #добавляем файл в архив newzip.write(r'D:\blogwebmastera_links.txt') #добавляем файл2 в архив newzip.close() #закрываем архив |
В коде выше я добавил два файла. Если нужно добавить много файлов с какой-то папки воспользуйтесь циклом. А для чтения с папок модуль os.
Как прочитать содержимое архива через питон
1 2 3 | import zipfile zip1 = zipfile.ZipFile('C:\example_bdseoru.zip', 'r') print(zip1.namelist()) |
В общем, модуль zipfile решает много задач. Более подробнее о zipfile читайте на странице документации:
https://docs.python.org/3/library/zipfile.html.
Также советую заглянуть сюда — https://pymotw.com/3/zipfile/ , там есть примеры использования zipfile.
Могли бы вы мне помочь? Имеется кучка картинок формата png. Хочу их спрятать в архив и в случае необходимости чтобы программа брала картинки из архива, причем планирую запароленый архив.
Как именно обратиться к определенной картинке при этом?
Если правильно понял, прочесть/открыть файл, задав пароль.
ZipFile.read("name_file.png", pwd="yourPassword")
А всё, можете не отвечать, я посёрфил по форумникам и нашёл, как это делается.
если не тяжело — какое решение использовали?
А как добавить целую директорию? Когда я указываю просто путь к папке, в которой фалы, оно копирует мне в архив только саму папку, но не файлы в ней.
я наверное начал бы с for file in os.listdir(path2dir)