Lewati ke konten utama

Bekerja dengan File Zip di Python

Dalam tutorial ini, Anda akan belajar cara bekerja dengan File Zip di Python menggunakan modul zipfile. zipfile adalah modul bawaan Python.
Diperbarui 29 Sep 2026  · 13 mnt Baca

Jelajahi bersama AI

ChatGPTClaudePerplexity

Prasyarat untuk Bekerja dengan File Zip

  • Anda harus memahami penanganan file di Python untuk memahami penanganan file Zip. Jika Anda belum memahami penanganan file, kunjungi bagian File Handling di W3Schools untuk belajar.
  • Konsep OOP di Python
  • Konsep Python seperti kondisional, loop, fungsi, kelas, dll.

Buka tautan ini untuk mengunduh semua folder Zip yang saya gunakan di bagian berikutnya.

Apa itu File Zip?

Zip adalah format file arsip yang mendukung kompresi data tanpa kehilangan. File Zip adalah satu berkas yang berisi satu atau lebih file terkompresi.

Kegunaan File Zip?

  • File Zip membantu Anda menempatkan semua file terkait di satu tempat.
  • File Zip membantu mengurangi ukuran data.
  • File Zip ditransfer lebih cepat daripada file individual melalui banyak koneksi.

Modul zipfile

Jelajahi semua method dan kelas dari modul zipfile menggunakan method dir(). Lihat kode untuk mendapatkan semua kelas dan method dari modul zipfile.

import zipfile # importing the 'zipfile' module

print(dir(zipfile))
['BZIP2_VERSION', 'BadZipFile', 'BadZipfile', 'DEFAULT_VERSION', 'LZMACompressor', 'LZMADecompressor', 'LZMA_VERSION', 'LargeZipFile', 'MAX_EXTRACT_VERSION', 'PyZipFile', 'ZIP64_LIMIT', 'ZIP64_VERSION', 'ZIP_BZIP2', 'ZIP_DEFLATED', 'ZIP_FILECOUNT_LIMIT', 'ZIP_LZMA', 'ZIP_MAX_COMMENT', 'ZIP_STORED', 'ZipExtFile', 'ZipFile', 'ZipInfo', '_CD64_CREATE_VERSION', '_CD64_DIRECTORY_RECSIZE', '_CD64_DIRECTORY_SIZE', '_CD64_DISK_NUMBER', '_CD64_DISK_NUMBER_START', '_CD64_EXTRACT_VERSION', '_CD64_NUMBER_ENTRIES_THIS_DISK', '_CD64_NUMBER_ENTRIES_TOTAL', '_CD64_OFFSET_START_CENTDIR', '_CD64_SIGNATURE', '_CD_COMMENT_LENGTH', '_CD_COMPRESSED_SIZE', '_CD_COMPRESS_TYPE', '_CD_CRC', '_CD_CREATE_SYSTEM', '_CD_CREATE_VERSION', '_CD_DATE', '_CD_DISK_NUMBER_START', '_CD_EXTERNAL_FILE_ATTRIBUTES', '_CD_EXTRACT_SYSTEM', '_CD_EXTRACT_VERSION', '_CD_EXTRA_FIELD_LENGTH', '_CD_FILENAME_LENGTH', '_CD_FLAG_BITS', '_CD_INTERNAL_FILE_ATTRIBUTES', '_CD_LOCAL_HEADER_OFFSET', '_CD_SIGNATURE', '_CD_TIME', '_CD_UNCOMPRESSED_SIZE', '_ECD_COMMENT', '_ECD_COMMENT_SIZE', '_ECD_DISK_NUMBER', '_ECD_DISK_START', '_ECD_ENTRIES_THIS_DISK', '_ECD_ENTRIES_TOTAL', '_ECD_LOCATION', '_ECD_OFFSET', '_ECD_SIGNATURE', '_ECD_SIZE', '_EndRecData', '_EndRecData64', '_FH_COMPRESSED_SIZE', '_FH_COMPRESSION_METHOD', '_FH_CRC', '_FH_EXTRACT_SYSTEM', '_FH_EXTRACT_VERSION', '_FH_EXTRA_FIELD_LENGTH', '_FH_FILENAME_LENGTH', '_FH_GENERAL_PURPOSE_FLAG_BITS', '_FH_LAST_MOD_DATE', '_FH_LAST_MOD_TIME', '_FH_SIGNATURE', '_FH_UNCOMPRESSED_SIZE', '_SharedFile', '_Tellable', '_ZipDecrypter', '_ZipWriteFile', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_check_compression', '_check_zipfile', '_get_compressor', '_get_decompressor', 'binascii', 'bz2', 'compressor_names', 'crc32', 'error', 'importlib', 'io', 'is_zipfile', 'lzma', 'main', 'os', 're', 'shutil', 'sizeCentralDir', 'sizeEndCentDir', 'sizeEndCentDir64', 'sizeEndCentDir64Locator', 'sizeFileHeader', 'stat', 'stringCentralDir', 'stringEndArchive', 'stringEndArchive64', 'stringEndArchive64Locator', 'stringFileHeader', 'struct', 'structCentralDir', 'structEndArchive', 'structEndArchive64', 'structEndArchive64Locator', 'structFileHeader', 'sys', 'threading', 'time', 'zlib']

Anda sudah melihat banyak kelas dan method, bukan? Namun, Anda tidak akan mempelajari semuanya. Anda hanya akan mempelajari beberapa kelas dan method untuk bekerja dengan file Zip.

Mari kita lihat beberapa Exception, Kelas, dan Method yang berguna beserta penjelasan singkat.

Exceptions

Exception adalah pesan yang digunakan untuk menampilkan kesalahan secara tepat seperti yang Anda inginkan. Di Python, Anda menggunakan kata kunci try, except, finally untuk penanganan error.

Jika Anda belum familiar dengan penanganan error, buka dokumentasi Error Handling resmi Python untuk mempelajarinya.

Mari kita lihat semua exception dalam modul zipfile.

zipfile.BadZipFile

zipfile.BadZipFile adalah exception dalam modul zipfile. Error ini akan muncul untuk file Zip buruk. Lihat contoh di bawah.

## zipfile.BadZipFile
import zipfile

def main():
    try:
        with zipfile.ZipFile('sample_file.zip') as file: # opening the zip file using 'zipfile.ZipFile' class
            print("Ok")
    except zipfile.BadZipFile: # if the zip file has any errors then it prints the error message which you wrote under the 'except' block
        print('Error: Zip file is corrupted')

if __name__ == '__main__': main()

## I used a badfile for the test
Ok

zipfile.LargeZipFile

Misalkan Anda ingin bekerja dengan file Zip yang besar, Anda perlu mengaktifkan fungsionalitas ZIP64 saat membuka Zip. Jika tidak diaktifkan, LargeZipFile akan muncul. Lihat contohnya.

## zipfile.LargeZipFile
## Without enabling 'Zip64'
import zipfile

def main():
    try:
        with zipfile.ZipFile('sample_file.zip') as file:
            print('File size is compatible')
    except zipfile.LargeZipFile: # it raises an 'LargeZipFile' error because you didn't enable the 'Zip64'
        print('Error: File size if too large')

if __name__ == '__main__': main()
File size is compatible
## zipfile.LargeZipFile
## With enabling 'ZIP64'
import zipfile

def main():
    try:
        with zipfile.ZipFile('sample_file.zip', mode = 'r', allowZip64 = True) as file: # here enabling the 'Zip64'
            print('File size is compatible')
    except zipfile.LargeZipFile:
        print('Error: File size if too large') # if the file size is too large to open it prints the error you have written

if __name__ == '__main__': main()
File size is compatible

Pilih file Zip yang paling cocok untuk penanganan Exception dan coba jalankan programnya. Anda akan mendapatkan gambaran yang jelas.

Kelas

Sederhananya, kelas adalah sekumpulan method dan atribut. Anda menggunakan method dan atribut kelas di mana pun Anda mau dengan membuat instans dari kelas.

Mari kita lihat beberapa kelas dari modul zipfile.

zipfile.ZipFile

Kelas yang paling umum digunakan untuk bekerja dengan File Zip adalah kelas ZipFile.

zipfile.ZipFile digunakan untuk menulis dan membaca file Zip. Kelas ini memiliki beberapa method yang digunakan untuk menangani file Zip.

Sekarang, jelajahi method dari kelas ZipFile menggunakan objek dir(). Lihat kodenya.

import zipfile

print(dir(zipfile.ZipFile)) # accessing the 'ZipFile' class
['_RealGetContents', '__class__', '__del__', '__delattr__', '__dict__', '__dir__', '__doc__', '__enter__', '__eq__', '__exit__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_extract_member', '_fpclose', '_open_to_write', '_sanitize_windows_name', '_windows_illegal_name_trans_table', '_write_end_record', '_writecheck', 'close', 'comment', 'extract', 'extractall', 'fp', 'getinfo', 'infolist', 'namelist', 'open', 'printdir', 'read', 'setpassword', 'testzip', 'write', 'writestr']

Anda sudah menggunakan kelas zipfile.ZipFile untuk membaca file Zip pada contoh sebelumnya.

zipfile.ZipFile berisi banyak method seperti extract, open, getinfo, setpassword, dll., untuk bekerja dengan file Zip.

Mari kita lihat beberapa method dari kelas ZipFile.

## zipfile.ZipFile
import zipfile

def main():
    with zipfile.ZipFile('sample_file.zip') as file:

        # ZipFile.infolist() returns a list containing all the members of an archive file
        print(file.infolist())

        # ZipFile.namelist() returns a list containing all the members with names of an archive file
        print(file.namelist())

        # ZipFile.getinfo(path = filepath) returns the information about a member of Zip file.
        # It raises a KeyError if it doesn't contain the mentioned file
        print(file.getinfo(file.namelist()[-1]))

        # ZipFile.open(path = filepath, mode = mode_type, pwd = password) opens the members of an archive file
        # 'pwd' is optional -> if it has password mention otherwise leave it
        text_file = file.open(name = file.namelist()[-1], mode = 'r')

        # 'read()' method of the file prints all the content of the file. You see this method in file handling.
        print(text_file.read())  

        # You must close the file if you don't open a file using 'with' keyword
        # 'close()' method is used to close the file
        text_file.close()

        # ZipFile.extractall(path = filepath, pwd = password) extracts all the files to current directory
        file.extractall()
        # after executing check the directory to see extracted files


if __name__ == '__main__': main()
[<ZipInfo filename='extra_file.txt' filemode='-rw-rw-rw-' file_size=59>, <ZipInfo filename='READ ME.txt' filemode='-rw-rw-rw-' file_size=59>, <ZipInfo filename='even_odd.py' filemode='-rw-rw-rw-' file_size=129>]
['extra_file.txt', 'READ ME.txt', 'even_odd.py']
<ZipInfo filename='even_odd.py' filemode='-rw-rw-rw-' file_size=129>
b"num = int(input('Enter a Number:- '))\r\nif num % 2 == 0:\r\n\tprint('{} is Even'.fromat(num))\r\nelse:\r\n\tprint('{} is Odd'.fromat(num))"

Jika Anda ingin mempelajari semua method dari kelas ZipFile gunakan fungsi help() pada method yang ingin Anda pelajari.

Atau kunjungi dokumentasi resmi Python untuk belajar.

zipfile.ZipInfo

Kelas zipfile.ZipInfo digunakan untuk merepresentasikan anggota dari folder Zip.

Pertama, jelajahi semua objek dari kelas zipfile.ZipInfo menggunakan method dir(). Lihat kode di bawah.

## zipfile.ZipInfo
import zipfile

print(dir(zipfile.ZipInfo))
['CRC', 'FileHeader', '__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__slots__', '__str__', '__subclasshook__', '_decodeExtra', '_encodeFilenameFlags', '_raw_time', 'comment', 'compress_size', 'compress_type', 'create_system', 'create_version', 'date_time', 'external_attr', 'extra', 'extract_version', 'file_size', 'filename', 'flag_bits', 'from_file', 'header_offset', 'internal_attr', 'is_dir', 'orig_filename', 'reserved', 'volume']

Sekarang, Anda akan melihat beberapa method dari kelas zipfile.ZipInfo

## zipfile.ZipInfo
import zipfile

def main():
    with zipfile.ZipFile('sample_file.zip') as file:

        # 'infolist()' is the object of 'ZipFile' class
        # 'infolist()' returns a list containing all the folders and files of the zip -> 'ZipInfo' objects
        # assigning last element of the list to a variable to test all the methods of 'ZipInfo'
        archive = file.infolist()
        read_me_file = archive[-1]

        # 'ZipInfo' methods

        # ZipInfo_object.filename returns the name of the file
        print("Name of the file:- {}".format(read_me_file.filename))

        # ZipInfo_object.file_size returns the size of the file
        print("Size of the file:- {}".format(read_me_file.file_size))

        # ZipInfo_object.is_dir() returns True if it's directory otherwise False
        print("Is directory:- {}".format(read_me_file.is_dir()))

        # ZipInfo_object.date_time() returns the created date & time of file
        print("File created data & time:- {}".format(read_me_file.date_time))

if __name__ == '__main__': main()
Name of the file:- sample_file/READ ME.txt
Size of the file:- 59
Is directory:- False
File created data & time:- (2018, 10, 4, 11, 32, 22)

Kunjungi ZipInfo, jika Anda ingin mempelajari lebih lanjut tentang objek ZipInfo.

Method

Method adalah blok kode untuk fungsionalitas tertentu dalam program. Misalnya, jika Anda ingin mencari nilai absolut dari sebuah angka, Anda dapat menggunakan method Python bernama abs.

Anda dapat menggunakannya di mana pun Anda mau. Mari kita lihat beberapa method dari modul zipfile.

zipfile.is_zipfile()

Method is_zipfile(filename) dari modul zipfile mengembalikan True jika file tersebut adalah Zip yang valid, jika tidak maka akan mengembalikan False.

Mari kita lihat contohnya.

## zipfile.is_zip(filename)
import zipfile

def main():
    print(zipfile.is_zipfile('sample_file.zip')) # it returns True

if __name__ == '__main__': main()
True

Menangani File Zip

Di bagian ini, Anda akan belajar cara menangani file Zip seperti Membuka, Mengekstrak, Menulis, dll.

Mengekstrak File Zip

Mengekstrak file dari sebuah Zip menggunakan method extractall ke direktori saat ini.

## extracting zip file
import zipfile

def main():

    # assigning filename to a variable
    file_name = 'sample_file.zip'

    # opening Zip using 'with' keyword in read mode
    with zipfile.ZipFile(file_name, 'r') as file:
        # printing all the information of archive file contents using 'printdir' method
        print(file.printdir())

        # extracting the files using 'extracall' method
        print('Extracting all files...')
        file.extractall()
        print('Done!') # check your directory of zip file to see the extracted files

if __name__ == '__main__': main()
File Name                                             Modified             Size
sample_file/                                   2018-10-04 11:33:22            0
sample_file/even_odd.py                        2018-06-29 23:35:54          129
sample_file/READ ME.txt                        2018-10-04 11:32:22           59
None
Extracting all files...
Done!

Mengekstrak Zip dengan Kata Sandi

Untuk mengekstrak Zip dengan kata sandi, Anda perlu memberikan nilai ke argumen posisional pwd dari method extract(pwd = password) atau extractall(pwd = password).

Anda harus memberikan kata sandi dalam bentuk bytes. Untuk mengonversi str ke bytes gunakan method bawaan Python bytes dengan format enkode utf-8.

Mari lihat contohnya.

## extracting zip with password
import zipfile

def main():
    file_name = 'pswd_file.zip'
    pswd = 'datacamp'

    with zipfile.ZipFile(file_name) as file:
        # password you pass must be in the bytes you converted 'str' into 'bytes'
        file.extractall(pwd = bytes(pswd, 'utf-8'))

if __name__ == '__main__': main()

Anda juga dapat mengekstrak file dengan menggunakan method setpassword(pwd = password) dari kelas ZipFile. Lihat contoh di bawah.

## extracting zip with password
import zipfile

def main():
    file_name = 'pswd_file.zip'
    pswd = 'datacamp'

    with zipfile.ZipFile(file_name) as file:
        # 'setpassword' method is used to give a password to the 'Zip'
        file.setpassword(pwd = bytes(pswd, 'utf-8'))
        file.extractall()

if __name__ == '__main__': main()

Membuat File Zip

Untuk membuat file Zip, Anda tidak memerlukan method tambahan. Cukup berikan namanya ke kelas ZipFile, dan arsip akan dibuat di direktori saat ini.

Lihat contoh di bawah.

## Creating Zip file
import zipfile

def main():

    archive_name = 'example_file.zip'
    # below one line of code will create a 'Zip' in the current working directory
    with zipfile.ZipFile(archive_name, 'w') as file:
        print("{} is created.".format(archive_name))

if __name__ == '__main__': main()
example_file.zip is created.

Anda harus membuka file Zip dalam mode tulis untuk menulis file ke arsip. Mode ini akan menimpa semua file yang sudah ada di Zip.

Mari kita lihat contohnya.

## Writing files to zip
import zipfile

def main():

    file_name = 'sample_file.zip'

    # Opening the 'Zip' in writing mode
    with zipfile.ZipFile(file_name, 'w') as file:
        # write mode overrides all the existing files in the 'Zip.'
        # you have to create the file which you have to write to the 'Zip.'
        file.write('extra_file.txt')
        print('File overrides the existing files')

    # opening the 'Zip' in reading mode to check
    with zipfile.ZipFile(file_name, 'r') as file:
        print(file.namelist())

if __name__ == '__main__': main()
File overrides the existing files
['extra_file.txt']

Menambahkan File ke Zip

Anda harus membuka Zip dalam mode append(a) untuk menambahkan file apa pun ke Zip. Mode ini tidak menimpa file yang sudah ada.

Mari kita lihat contohnya.

## Appending files to zip
import zipfile

def main():

    file_name = 'sample_file.zip'

    # opening the 'Zip' in writing mode
    with zipfile.ZipFile(file_name, 'a') as file:
        # append mode adds files to the 'Zip'
        # you have to create the files which you have to add to the 'Zip'
        file.write('READ ME.txt')
        file.write('even_odd.py')
        print('Files added to the Zip')

    # opening the 'Zip' in reading mode to check
    with zipfile.ZipFile(file_name, 'r') as file:
        print(file.namelist())

if __name__ == '__main__': main()
Files added to the Zip
['extra_file.txt', 'READ ME.txt', 'even_odd.py']

Sampai di sini, Anda telah mempelajari cara menangani file Zip. Sekarang, Anda dapat membuka, menulis, menambahkan, mengekstrak, membuat, dll., file Zip. Berikutnya, Anda akan menulis program sederhana.

Mari kita lihat apa itu?

Mengekstrak Banyak Sub-Zip dengan Kata Sandi Menggunakan Loop dan zipfile

  • Anda memiliki sebuah Zip yang berisi beberapa file Zip turunan secara bertingkat. Dan masing-masing file Zip memiliki kata sandi yang merupakan nama mereka. Tantangan kita adalah mengekstrak semua Zip hingga Anda mencapai akhir.

Langkah-langkah Menyelesaikan Masalah

  • Ekstrak file Induk menggunakan namanya sebagai kata sandi.
  • Dapatkan nama anak pertama menggunakan method namelist(). Simpan dalam variabel.
  • Jalankan loop untuk Waktu Tak Terbatas.

    • Periksa apakah file tersebut Zip atau bukan menggunakan method is_zipfile(). Jika ya, lakukan hal berikut.

      • Buka zip dengan variabel name.

      • Dapatkan kata sandi Zip dari variabel name.

      • Ekstrak Zip.

      • Dapatkan dan simpan nama Zip berikutnya dalam variabel name.

    • jika tidak

      • Hentikan loop menggunakan break.

Saya telah membuat Prosedur di atas. Jika Anda mau, Anda dapat mengubahnya sesuai dengan susunan file Anda.

## Solution
import zipfile

def main():

    # storing the parent name
    parent_file_name = '000.zip'

    with zipfile.ZipFile(parent_file_name, 'r') as parent_file:

        # extracting the parent file
        pswd = bytes(parent_file_name.split('.')[0], 'utf-8')
        parent_file.extractall(pwd = pswd)

        # getting the first child
        next_zip_name = parent_file.namelist()[0]

        # looping through the sub zips infinite times until you don't encouter a 'Zip' file
        while True:

            if zipfile.is_zipfile(next_zip_name):
                # opening the zip
                with zipfile.ZipFile(next_zip_name, 'r') as child_file:

                    # getting password from the zip name
                    pswd = bytes(next_zip_name.split('.')[0], 'utf-8')

                    # extracting the zip
                    child_file.extractall(pwd = pswd)

                    # getting the child zip name
                    next_zip_name = child_file.namelist()[0]
            else:
                break

if __name__ == '__main__': main()

Setelah menjalankan program di atas, Anda akan melihat semua sub-zip diekstrak ke direktori saat ini.

Penutup

Selamat telah menyelesaikan tutorial!

Semoga Anda menikmati tutorial ini. Artikel ini sangat membantu saat Anda bekerja dengan file Zip. Kini Anda dapat bekerja dengan file Zip.

Jika Anda memiliki pertanyaan terkait artikel ini, tanyakan di kolom komentar. Saya akan membalas secepatnya.

Sekali lagi, jika Anda baru mengenal Python ambil kursus gratis DataCamp Intro to Python for Data Science untuk mempelajari bahasa Python atau baca dokumentasi resmi Python.

Selamat ngoding!

Topik
Python

Kursus Python

Kursus

Pengantar Python

4 jam
7.1M
Kuasai dasar-dasar analisis data dengan Python dalam 4 jam. Kursus online ini memperkenalkan antarmuka Python dan pustaka populer.
Lihat DetailRight Arrow
Mulai Kursus
Lihat SelengkapnyaRight Arrow
Terkait

blogs

Tutorial Korelasi di R

Dapatkan pengenalan dasar-dasar korelasi di R: pelajari lebih lanjut tentang koefisien korelasi, matriks korelasi, plotting korelasi, dan sebagainya.
David Woods's photo

David Woods

13 mnt

blogs

Spaghetti Plot dan Jalur Badai

Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Hugo Bowne-Anderson's photo

Hugo Bowne-Anderson

13 mnt

blogs

12 Alternatif ChatGPT Terbaik yang Bisa Anda Coba pada 2026

Artikel ini menyajikan daftar alternatif ChatGPT yang akan meningkatkan produktivitas Anda.
Javier Canales Luna's photo

Javier Canales Luna

14 mnt

blogs

40 Pertanyaan Wawancara DBMS Teratas di 2026

Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Dario Radečić's photo

Dario Radečić

15 mnt

Lihat SelengkapnyaLihat Selengkapnya