Открытие Zip файлов
Для начала импортировать zipfile
модуль и установить имя файла.
import zipfile
filename = 'zipfile.zip'
Работа с почтовыми архивами очень похоже на работу с файлами , вы создаете объект, открыв ZipFile, которая позволяет работать на нем , прежде чем закрыть файл снова.
zip = zipfile.ZipFile(filename)
print(zip)
# <zipfile.ZipFile object at 0x0000000002E51A90>
zip.close()
В Python 2.7 и Python 3 версии выше 3.2, можно использовать with
менеджером контекста. Мы открываем файл в режиме «чтения», а затем печатаем список имен файлов:
with zipfile.ZipFile(filename, 'r') as z:
print(zip)
# <zipfile.ZipFile object at 0x0000000002E51A90>
Изучение содержимого Zipfile
Есть несколько способов проверить содержимое zip-файла. Вы можете использовать printdir
, чтобы просто получить различную информацию , отправляемые на stdout
with zipfile.ZipFile(filename) as zip:
zip.printdir()
# Out:
# File Name Modified Size
# pyexpat.pyd 2016-06-25 22:13:34 157336
# python.exe 2016-06-25 22:13:34 39576
# python3.dll 2016-06-25 22:13:34 51864
# python35.dll 2016-06-25 22:13:34 3127960
# etc.
Мы можем также получить список имен файлов с namelist
метода. Здесь мы просто печатаем список:
with zipfile.ZipFile(filename) as zip:
print(zip.namelist())
# Out: ['pyexpat.pyd', 'python.exe', 'python3.dll', 'python35.dll', ... etc. ...]
Вместо того , чтобы namelist
, мы можем назвать infolist
метода, который возвращает список ZipInfo
объектов, которые содержат дополнительную информацию о каждом файле, например , метка времени и размере файла:
with zipfile.ZipFile(filename) as zip:
info = zip.infolist()
print(zip[0].filename)
print(zip[0].date_time)
print(info[0].file_size)
# Out: pyexpat.pyd
# Out: (2016, 6, 25, 22, 13, 34)
# Out: 157336
Извлечение содержимого zip-файла в каталог
Извлечь все содержимое файла zip-файла
import zipfile
with zipfile.ZipFile('zipfile.zip','r') as zfile:
zfile.extractall('path')
Если вы хотите извлечь отдельные файлы, используйте метод extract, он принимает список имен и путь в качестве входного параметра
import zipfile
f=open('zipfile.zip','rb')
zfile=zipfile.ZipFile(f)
for cont in zfile.namelist():
zfile.extract(cont,path)
Создание новых архивов
Для создания нового архива откройте zipfile с режимом записи.
import zipfile
new_arch=zipfile.ZipFile("filename.zip",mode="w")
Чтобы добавить файлы в этот архив, используйте метод write ().
new_arch.write('filename.txt','filename_in_archive.txt') #first parameter is filename and second parameter is filename in archive by default filename will taken if not provided
new_arch.close()
Если вы хотите записать строку байтов в архив, вы можете использовать метод writestr ().
str_bytes="string buffer"
new_arch.writestr('filename_string_in_archive.txt',str_bytes)
new_arch.close()