Sök…


Syntax

  • importera zip-fil
  • klass zip-fil. ZipFile ( fil, läge = 'r', komprimering = ZIP_STORED, allowZip64 = True )

Anmärkningar

Om du försöker öppna en fil som inte är en ZIP-fil, zipfile.BadZipFile undantaget zipfile.BadZipFile .

I Python 2.7 stavades detta zipfile.BadZipfile , och detta gamla namn behålls tillsammans med det nya i Python 3.2+

Öppna zip-filer

För att starta importerar du zipfile modulen och ställer in filnamnet.

import zipfile
filename = 'zipfile.zip'

Att arbeta med zip-arkiv liknar mycket att arbeta med filer , du skapar objektet genom att öppna zipfilen, vilket låter dig arbeta med det innan du stänger filen igen.

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

I Python 2.7 och i Python 3-versioner högre än 3.2 kan vi använda with context manager. Vi öppnar filen i läst läge och skriver sedan ut en lista med filnamn:

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

Undersökning av Zipfile-innehåll

Det finns några sätt att inspektera innehållet i en zip-fil. Du kan använda printdir att bara printdir en mängd information som skickas till 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.

Vi kan också få en lista över filnamn med namelist . Här skriver vi helt enkelt ut listan:

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

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

Istället för namelist kan vi ringa infolist , som returnerar en lista med ZipInfo objekt, som innehåller ytterligare information om varje fil, till exempel en tidsstämpel och filstorlek:

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

Extrahera innehållet i zip-filen till en katalog

Extrahera allt filinnehåll i en zip-fil

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

Om du vill extrahera enstaka filer använder extraktmetoden tar det namnlista och sökväg som inmatningsparameter

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

Skapa nya arkiv

För att skapa ett nytt arkiv, öppna zip-fil med skrivläge.

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

För att lägga till filer till detta arkiv, använd metoden ().

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

Om du vill skriva en bit byte till arkivet kan du använda metoden writestr ().

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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow