Szukaj…


Składnia

  • importuj plik zip
  • plik zip klasy . ZipFile ( plik, tryb = „r”, kompresja = ZIP_STORED, allowZip64 = True )

Uwagi

Podczas próby otwarcia pliku, który nie jest plikiem ZIP, zipfile.BadZipFile jest wyjątek zipfile.BadZipFile .

W Pythonie 2.7 był to napisany zipfile.BadZipfile , a ta stara nazwa została zachowana obok nowej w Pythonie 3.2+

Otwieranie plików zip

Aby rozpocząć, zaimportuj moduł zipfile i ustaw nazwę pliku.

import zipfile
filename = 'zipfile.zip'

Praca z archiwami zip jest bardzo podobna do pracy z plikami. Obiekt tworzy się, otwierając plik zip, co pozwala na pracę nad nim przed zamknięciem pliku.

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

W Pythonie 2.7 oraz w Pythonie 3 wersje wyższe niż 3,2, możemy używać with menedżerem kontekstowego. Otwieramy plik w trybie „odczytu”, a następnie drukujemy listę nazw plików:

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

Badanie zawartości pliku zip

Istnieje kilka sposobów na sprawdzenie zawartości pliku zip. Możesz użyć printdir aby uzyskać różne informacje wysłane do standardowego 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.

Możemy również uzyskać listę nazw plików za pomocą metody listy namelist . Tutaj po prostu drukujemy listę:

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

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

Zamiast listy namelist możemy wywołać metodę infolist , która zwraca listę obiektów ZipInfo , które zawierają dodatkowe informacje o każdym pliku, na przykład znacznik czasu i rozmiar pliku:

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

Wyodrębnianie zawartości pliku zip do katalogu

Wyodrębnij całą zawartość pliku zip

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

Jeśli chcesz wyodrębnić pojedyncze pliki, użyj metody wyodrębnienia, jako parametr wejściowy przyjmuje listę nazw i ścieżkę

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

Tworzenie nowych archiwów

Aby utworzyć nowe archiwum, otwórz plik zip w trybie zapisu.

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

Aby dodać pliki do tego archiwum, użyj metody 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()

Jeśli chcesz zapisać ciąg bajtów w archiwum, możesz użyć metody 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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow