Сжатие данных. Работа с архивами ZIP (окончание)

   
На этом шаге мы рассмотрим свойства и методы класса ZipFile.

   
Теперь рассмотрим методы и атрибуты класса ZipFile.

  • write (<Имя файла>[, arcname=<Имя, которое он будет иметь в архиве&gt;][, compress_type=None]) - добавляет в
    архив файл с указанным именем. Параметр arcname задает имя, которое файл примет, будучи помещенным в архив, - если он не указан,
    файл сохранит свое оригинальное имя. Параметр compress_type задает алгоритм сжатия - если он не указан, будет использован алгоритм,
    заданный при открытии самого архива. Примеры:

    >>> # Добавляем в архив файл doc.doc
    >>> f.write ("doc.doc")
    >>> # Добавляем в архив файл doc2.doc под именем newdoc.doc
    >>> f.write ("doc2.doc", arcname = "newdoc.doc")
    
  • writestr (<Имя файла>, <Данные>[, compress_type=Nane]) - добавляет в архив произвольные данные в виде
    файла с указанным именем:

    >>> # Считываем содержимое файла text.txt
    >>> f2 = open ("text.txt", mode  = "r")
    >>> s = f2.read()
    >>> # Добавляем прочитанные данные в архив под именем textual.txt
    >>> f.writestr ("textual.txt", s)
    >>> f2.close ()
    
  • close () - закрывает архивный файл:
    >>> f.close ()
    
  • getinfo (<Имя файла>) - возвращает сведения о хранящемся в архиве файле с указанным именем. Эти сведения представляются в
    виде объекта класса ZipInfo, объявленного в модуле zipfile и поддерживающего следующие полезные нам атрибуты:

    • filename - имя файла;
    • filesize - размер изначального (несжатого) файла;
    • datetime - дата и время последнего изменения файла. Представляется в виде кортежа из шести элементов: года, номера месяца (от 1 до 12),
      числа (от 1 до 31), часов (от 0 до 23), минут (от 0 до 59) и секунд (от 0 до 59);
    • compress_size - размер файла в сжатом виде;
    • compress_type - алгоритм сжатия;
    • CRC - 32-разрядная контрольная сумма;
    • comment - комментарий к файлу;
    • create_system - операционная система, в которой был создан архив;
    • create_version - версия архиватора, в которой был создан архив;
    • extract_version - версия архиватора, необходимая для распаковки архива.

    Если файл с заданным именем отсутствует в архиве, возбуждается исключение KeyError. Пример:

    >>> f = zipfile.ZipFile("test.zip", mode="r", compression = zipfile.ZIP_DEFLATED)
    >>> gf = f.getinfo ("doc.doc")
    >>> gf.filename, gf.file_size, gf.compress_size
    ('doc.doc', 20992, 6928)
    >>> gf.date_time
    (1998, 2, 26, 16, 37, 38)
    
  • infolist () - возвращает сведения обо всех содержащихся в архиве файлах в виде списка объектов класса ZipInfo:
    >>> for i in f.infolist (): print(i.filename, end = " ")
    
    doc.doc newdoc.doc textual.txt 
    
  • namelist () - возвращает список с именами хранящихся в архиве файлов:
    >>> f.namelist()
    ['doc.doc', 'newdoc.doc', 'textual.txt']
    
  • extract (<Файл>[, path=None] [, pwd=None]) - распаковывает из архива указанный файл, который может быть задан в виде имени
    или объекта класса ZipInfo. Параметр path сообщает архиватору путь, по которому должен быть распакован файл, - если он
    не указан, файл будет сохранен там же, где находится сам архив. Параметр pwd задает пароль для распаковки файла, если таковой требуется.
    В качестве результата возвращается полный путь к распакованному файлу. Примеры:

    >>> # Распаковываем файл doc.doc, сведения о котором хранятся
    >>> # в переменной gf
    >>> f .extract (gf)
    'H:\\Python34\\doc.doc'
    >>> # Распаковываем файл newdoc.doc в папку h:\work
    >>> f.extract ("newdoc.doc",   path = r'h:\work')
    'h:\\work\\newdoc.doc'
    
  • extractall ([path=None] [, members=None] [, pwd=None]) - распаковывает сразу несколько или даже все файлы из архива. Параметр members
    задает список имен файлов, которые должны быть распакованы, - если он не указан, будут распакованы все файлы. Назначение параметров path и pwd
    рассмотрено в описании метода extract(). Примеры:

    >>> # Распаковываем все файлы
    >>> f.extractall ()
    >>> #  Распаковываем лишь  файлы doc.doc и newdoc.doc в папку h:\work
    >>> f.extractall (path = r'h:\work', members = ["doc.doc", "newdoc.doc"])
    
  • open (<Файл>[, pwd=None]) - открывает хранящийся в архиве файл для чтения. Файл может быть задан либо в виде имени,
    либо как объект класса ZipInfo. Результатом, возвращенным методом, станет объект класса ZipExtFile, поддерживающий методы read(),
    readline(), readlines(), знакомые нам по 246 шагу, а также итерационный протокол. Вот пример открытия файла textual.txt, хранящегося
    в архиве, и записи его содержимого в файл newtext.txt:

    >>> d = f.open("textual.txt")
    >>> f2 = open("newtext.txt", mode = "wb")
    >>> f2.write (d.read())
    30311
    >>> f2.close()
    
  • read (<Имя файла>, pwd=None) - возвращает содержимое хранящегося в архиве файла с указанным именем. Для примера
    перепишем приведенный ранее код:

    >>> d = f.read ("textual.txt")
    >>> f2 = open ("newtext.txt", mode = "wb")
    >>> f2.write (d)
    30311
    >>> f2.close ()
    
  • setpassword (<Пароль>) - задает пароль по умолчанию для распаковки файлов;
  • testzip() - выполняет проверку целостности архива. Возвращает None, если архив не поврежден, или имя первого встретившегося ему сбойного файла;
  • comment - позволяет получить или задать комментарий к архиву. В качестве комментария может выступать строка длиной не более 65535 байтов.
    Более длинные строки автоматически сокращаются при закрытии архива.

   
В модуле zipfile также определена функция is_zipfile (<Имя файла>). Она возвращает True, если файл с переданным
ей именем является архивом ZIP, и False - в противном случае. Примеры:

>>> zipfile.is_zipfile("test.zip")
True
>>> zipfile.is_zipfile ("doc.doc")
False

   
При обработке файлов ZIP могут возникнуть исключения следующих классов (все они объявлены в модуле zipfile):

  • BadZipFile - либо архив поврежден, либо это вообще не ZIP-архив;
  • LargeZipFile - слишком большой архив ZIP. Обычно возникает, когда архив создается
    вызовом конструктора класса ZipFile с параметром allowZip64, имеющим значение
    False, и размер получившегося архива в процессе работы становится больше 2 Гбайт.

   
На следующем шаге мы рассмотрим работу с архивами TAR.



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий