Zoeken…


Syntaxis

  • zipbestand importeren
  • klasse zipbestand. ZipFile ( bestand, mode = 'r', compressie = ZIP_STORED, allowZip64 = True )

Opmerkingen

Als u een bestand probeert te openen dat geen ZIP-bestand is, wordt de uitzondering zipfile.BadZipFile verhoogd.

In Python 2.7 was dit spelt zipfile.BadZipfile , en deze oude naam blijft behouden naast de nieuwe in Python 3.2+

Zip-bestanden openen

Importeer om te beginnen de zipfile module en stel de bestandsnaam in.

import zipfile
filename = 'zipfile.zip'

Het werken met zip-archieven lijkt erg op het werken met bestanden , u maakt het object door het zipbestand te openen, waarmee u eraan kunt werken voordat u het bestand opnieuw sluit.

zip = zipfile.ZipFile(filename)
print(zip)
# <zipfile.ZipFile object at 0x0000000002E51A90>
zip.close()

In Python 2.7 en in Python 3 versies hoger dan 3.2 kunnen we de with contextmanager gebruiken. We openen het bestand in de modus "Lezen" en drukken vervolgens een lijst met bestandsnamen af:

with zipfile.ZipFile(filename, 'r') as z:
    print(zip)
    # <zipfile.ZipFile object at 0x0000000002E51A90>

Zipfile-inhoud onderzoeken

Er zijn een paar manieren om de inhoud van een zipbestand te inspecteren. U kunt de printdir om gewoon een verscheidenheid aan informatie naar 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.

We kunnen ook een lijst met bestandsnamen krijgen met de namelist . Hier drukken we eenvoudig de lijst af:

with zipfile.ZipFile(filename) as zip:
    print(zip.namelist())

# Out: ['pyexpat.pyd', 'python.exe', 'python3.dll', 'python35.dll', ... etc. ...]

In plaats van een namelist kunnen we de infolist methode aanroepen, die een lijst met ZipInfo objecten ZipInfo , die extra informatie over elk bestand bevat, bijvoorbeeld een tijdstempel en bestandsgrootte:

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

De inhoud van een zipbestand uitpakken naar een map

Pak alle bestandsinhoud van een zipbestand uit

import zipfile
with zipfile.ZipFile('zipfile.zip','r') as zfile:
    zfile.extractall('path')

Als u afzonderlijke bestanden wilt uitpakken, gebruikt u de extractiemethode, deze neemt de namenlijst en het pad als invoerparameter

import zipfile
f=open('zipfile.zip','rb')
zfile=zipfile.ZipFile(f)
for cont in zfile.namelist():
    zfile.extract(cont,path)

Nieuwe archieven maken

Open een nieuw zipbestand met de schrijfmodus om een nieuw archief te maken.

import zipfile
new_arch=zipfile.ZipFile("filename.zip",mode="w")

Gebruik de methode write () om bestanden aan dit archief toe te voegen.

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()

Als u een reeks bytes in het archief wilt schrijven, kunt u de methode writestr () gebruiken.

str_bytes="string buffer"
new_arch.writestr('filename_string_in_archive.txt',str_bytes)
new_arch.close()


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow