Heim  >  Artikel  >  Backend-Entwicklung  >  So komprimieren und dekomprimieren Sie ZIP-Dateien in Python

So komprimieren und dekomprimieren Sie ZIP-Dateien in Python

黄舟
黄舟Original
2017-10-04 09:26:051564Durchsuche

Dieser Artikel stellt hauptsächlich die Methode zum Komprimieren und Dekomprimieren von ZIP-Dateien in Python vor. Er analysiert die gängigen Betriebstechniken zum Komprimieren und Dekomprimieren von ZIP-Dateien in Python anhand konkreter Beispiele

Das Beispiel in diesem Artikel beschreibt, wie ZIP-Dateien in Python komprimiert und dekomprimiert werden. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:

Manchmal müssen wir ZIP-Dateien in Python verwenden, und in Version 1.6 stellt Python bereits das Zipfile-Modul zur Verfügung, um solche Vorgänge auszuführen. Das Zipfile-Modul in Python kann jedoch Situationen mit mehreren Volumes nicht verarbeiten. Diese Situation kommt jedoch selten vor und reicht daher für den normalen Gebrauch aus. Im Folgenden habe ich nur einige grundlegende Zipfile-Vorgänge aufgezeichnet, die für die meisten Situationen ausreichen.

Mit dem Zipfile-Modul können Sie eine Zip-Datei öffnen oder schreiben. Beispiel:


import zipfile
z = zipfile.ZipFile('zipfilename', mode='r')

Dies öffnet eine ZIP-Datei. Wenn der Modus „w“ oder „a“ ist, bedeutet dies, dass eine ZIP-Datei geschrieben werden soll. Beim Schreiben können Sie auch dem dritten Parameter folgen:

compression=zipfile.ZIP_DEFLATED oder compress=zipfile.ZIP_STORED ZIP_DEFLATED ist das Komprimierungsflag. Wenn Sie es verwenden, müssen Sie das zlib-Modul kompilieren. Letzteres ist nur mit Reißverschluss verpackt und nicht komprimiert.

Nach dem Öffnen der ZIP-Datei können Sie den Inhalt der ZIP-Datei lesen oder den Inhalt je nach Bedarf in der ZIP-Datei speichern.

Lesen Sie den Inhalt der Zip-Datei

Es ist sehr einfach. Das Zipfile-Objekt bietet eine read(name)-Methode. Name ist ein Dateieintrag in der ZIP-Datei. Nach Abschluss der Ausführung wird der gelesene Inhalt in der gewünschten Datei zurückgegeben.

Zip-Datei schreiben

Es gibt zwei Möglichkeiten: Eine besteht darin, direkt in eine vorhandene Datei zu schreiben, die andere darin, eine Zeichenfolge zu schreiben.

Beim ersten Schreiben (Dateiname, Arcname, Komprimierungstyp) mit dem Zipfile-Objekt können die letzten beiden Parameter ignoriert werden. Der erste Parameter ist der Dateiname und der zweite Parameter ist der Name in der ZIP-Datei. Wenn er nicht angegeben wird, wird derselbe Name wie der Dateiname verwendet. compress_type ist ein Komprimierungsflag, das die Parameter beim Erstellen einer ZIP-Datei überschreibt. Die zweite Methode besteht darin, writestr(zinfo_or_arcname, bytes) des Zipfile-Objekts zu verwenden. Der erste Parameter ist das Zipinfo-Objekt oder der Komprimierungsname, der in die komprimierte Datei geschrieben wird, und der zweite Parameter ist eine Zeichenfolge. Verwenden Sie diese Methode, um den Inhalt der Datei dynamisch zu organisieren.

Es ist zu beachten, dass beim Lesen diese Vorgänge, z. B. das Erstellen eines Verzeichnisses, von Ihnen selbst ausgeführt werden müssen, da nur der Inhalt gelesen werden kann , eine Datei erstellen und schreiben . Beim Schreiben kann die Verzeichnisstruktur in der ZIP-Datei nach Bedarf dynamisch organisiert werden, sodass die ZIP-Datei generiert werden kann, ohne der ursprünglichen Verzeichnisstruktur zu folgen.

Aus Gründen der Benutzerfreundlichkeit habe ich eine eigene ZFile-Klasse erstellt, hauptsächlich um die Komprimierungsfunktion im Rechtsklick-Menü von winrar zu implementieren – das heißt, um eine ZIP-Datei in ein bestimmtes Verzeichnis zu komprimieren und erstellen Sie automatisch den entsprechenden Unterordner. Ein weiterer Vorteil besteht in der Bequemlichkeit, ZIP-Dateien zu generieren. Der Quellcode der Klasse lautet:


# coding:cp936
# Zfile.py
# xxteach.com
import zipfile
import os.path
import os
class ZFile(object):
  def __init__(self, filename, mode='r', basedir=''):
    self.filename = filename
    self.mode = mode
    if self.mode in ('w', 'a'):
      self.zfile = zipfile.ZipFile(filename, self.mode, compression=zipfile.ZIP_DEFLATED)
    else:
      self.zfile = zipfile.ZipFile(filename, self.mode)
    self.basedir = basedir
    if not self.basedir:
      self.basedir = os.path.dirname(filename)
  def addfile(self, path, arcname=None):
    path = path.replace('//', '/')
    if not arcname:
      if path.startswith(self.basedir):
        arcname = path[len(self.basedir):]
      else:
        arcname = ''
    self.zfile.write(path, arcname)
  def addfiles(self, paths):
    for path in paths:
      if isinstance(path, tuple):
        self.addfile(*path)
      else:
        self.addfile(path)
  def close(self):
    self.zfile.close()
  def extract_to(self, path):
    for p in self.zfile.namelist():
      self.extract(p, path)
  def extract(self, filename, path):
    if not filename.endswith('/'):
      f = os.path.join(path, filename)
      dir = os.path.dirname(f)
      if not os.path.exists(dir):
        os.makedirs(dir)
      file(f, 'wb').write(self.zfile.read(filename))
def create(zfile, files):
  z = ZFile(zfile, 'w')
  z.addfiles(files)
  z.close()
def extract(zfile, path):
  z = ZFile(zfile)
  z.extract_to(path)
  z.close()

Das obige ist der detaillierte Inhalt vonSo komprimieren und dekomprimieren Sie ZIP-Dateien in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn