7 days of WordPress plugins, themes & templates - for free!* Unlimited asset downloads! Start 7-Day Free Trial
Advertisement
  1. Code
  2. Python

Mengkompres dan Mengekstrak File Di Dalam Python

Scroll to top
Read Time: 5 mins

Indonesian (Bahasa Indonesia) translation by Yosef Andreas (you can also view the original English article)

Jika kamu telah menggunakan komputer untuk beberapa waktu, kamu mungkin telah mendapati file dengan ekstensi .zip. Mereka adalah file khusus yang dapat menyimpan konten terkompresi banyak file, folder, dan subfolder lainnya. Ini membuat mereka cukup berguna untuk memindahkan file melalui internet. Apakah kamu mengetahui bahwa kamu dapat menggunakan Python untuk mengkompres atau mengekstrak file?

Tutorial ini akan mengajarimu bagaimana menggunakan module zipfile di dalam Python, untuk mengekstrak file individual atau banyak file sekaligus.

Mengkompres File Individu

Yang satu ini mudah dan memerlukan sangat sedikit kode. Kita mulai dengan mengimpor module zipfile dan kemudian membuka object ZipFile dalam menuliskan mode dengan mengkhususkan parameter kedua sebagai 'w'. Parameter pertama adalah jalur untuk file itu sendiri. Berikut code yang kamu butuhkan:

Mohon dicatat bahwa saya akan mengkhususkan jalur dalam semua snippet code di dalam sebuah format style Windows; kamu akan memerlukan untuk membuat perubahan yang sesuai jika kamu pada Linux atau Mac.

Kamu dapat mengkhususkan metode kompresi yang berbeda untuk mengkompres file. Metode terbaru BZIP2 dan LZMA ditambahkan ke dalam Python versi 3.3, dan ada beberapa tool lainnya yang tidak mendukung dua metode kompresi ini. Untuk alasan ini, aman untuk hanya menggunakan metode DEFLATED. Kamu harus tetap mencoba metode ini untuk melihat perbedaan di dalam ukuran file terkompresi.

Mengkompres Banyak File

Ini sedikit kompleks karena kamu perlu menjalankan pada semua file. Code di bawah mengkompres semua file dengan ekstensi pdf di dalam folder yang diberikan:

Kali ini, kita telah mengimport module os dan menggunakan metode walk() untuk menjalankan pada semua file dan subfolder di dalam folder original. Saya hanya mengkompres file pdf di dalam direktori. Kamu dapat juga membuat file archive yang berbeda untuk tiap format menggunakan pernyataan if.

Jika kamu tidak ingin mempertahankan struktur direktori, kamu dapat meletakkan semua file bersama-sama dengan menggunakan baris berikut:

Metode write() menerima tiga parameter. Parameter pertama adalah nama file yang ingin kita kompres. Parameter kedua adalah opsional dan membolehkanmu untuk mengkhususkan nama file yang berbeda untuk file terkompresi. Jika tidak ada yang dikhususkan, nama original yang digunakan.

Mengekstrak Semua File

Kamu dapat menggunakan metode extractall() untuk mengekstrak semua file dan folder dari file zip ke dalam direktori kerja terkini. Kamu dapat juga melewatkan sebuah nama folder ke extractall() untuk mengekstrak semua file dan folder di dalam sebuah direktori khusus. Jika folder yang kamu lewatkan tidak ada, metode ini akan membuatnya untukmu. Berikut code yang dapat kamu gunakan untuk mengekstrak file:

Jika kamu ingin mengekstrak banyak file, kamu akan harus menyuplai nama file yang kamu ingin ekstrak sebagai daftar.

Mengekstrak File Individual

Ini serupa dengan mengekstrak banyak file. Satu perbedaan adalah bahwa kali ini kamu perlu menyuplai nama file terlebih dahulu dan jalur untuk mengekstraknya nanti. Juga, kamu perlu menggunakan metode extract() alih-alih extractall(). Berikut snippet code dasar untuk mengekstrak file individu.

Membaca File Zip

Bayangkan sebuah skenario dimana kamu perlu melihat jika sebuah archive zip berisi file khusus. Hingga pada titik ini, pilihanmu satu-satunya adalah dengan mengekstrak semua file di dalam archive. Dengan cara yang serupa, kamu mungkin perlu mengekstrak hanya file yang lebih besar daripada ukuran tertentu. Module zipfile mengijinkan kita untuk menanyakan tentang konten sebuah archive tanpa pernah mengekstraknya.

Dengan menggunakan metode namelist() pada object ZipFile akan mengembalikan daftar semua anggota archive berdasarkan nama. Untuk mendapatkan informasi pada file spesifik di dalam archive, kamu dapat menggunakan metode getinfo() pada object ZipFile. Ini akan memberikanmu akses ke informasi spesifik pada file itu, seperti ukuran file terkompresi dan tidak terkompresi atau waktu modifikasi terakhir. Kita akan kembali pada itu nantinya.

Dengan memanggil metode getinfo() satu demi satu pada semua file dapat menjadi sebuah proses yang melelahkan ketika ada banyak file yang perlu diproses. Dalam kasus ini, kamu dapat menggunakan metode infolist() untuk mengembalikan sebuah daftar berisi sebuah object ZipInfo untuk setiap anggota di dalam archive. Urutan object ini di dalam daftar sama seperti zipfile sebenarnya.

Kamu dapat juga secara langsung membaca konten file khusus dari archive menggunakan metode read(file), dimana file adalah nama file yang ingin kamu baca. Untuk melakukan ini, archive harus dibuka di dalam mode read atau append.

Untuk mendapatkan ukuran terkompresi file individual dari archive, kamu dapat menggunakan atribut compress_size. Dengan cara serupa, untuk mengetahui ukuran tidak terkompresi, kamu dapat menggunakan atribut file_size.

Code berikut menggunakan properties dan metode yang telah kita diskusikan untuk mengekstrak hanya file yang memiliki ukuran di bawah 1MB.

Untuk mengetahui waktu dan tanggal ketika sebuah file khusus dari archive terakhir dimodifikasi, kamu dapat menggunakan atribut date_time. Ini akan mengembalikan urutan enam nilai. Angkanya akan berupa tahun, bulan, hari pada bulan, jam, menit, dan detik, di dalam urutan khusus itu. Tahun akan selalu lebih besar atau sama dengan 1980, dan jam, menit, dan detik berbasis nol.

Informasi ini tentang ukuran file original dan ukuran file terkompresi dapat membantumu menentukan apakah itu layak untuk mengompres file. Saya yakin itu dapat digunakan di dalam beberapa situasi lainnya juga.

Pemikiran Akhir

Sebagai bukti dari tutorial ini, dengan menggunakan modul zipfile untuk mengompres file memberikanmu lebih banyak fleksibilitas. Kamu dapat mengompres file berbeda di dalam sebuah direktori pada archive yang berbeda berdasarkan jenis, nama, atau ukuran. Kamu juga dapat memutuskan apakah kamu ingin menyimpan struktur direktori atau tidak. Dengan cara serupa, sementara mengekstrak file, kamu dapat mengekstrak mereka ke lokasi yang kamu inginkan, berdasarkan pada kriteriamu sendiri seperti ukuran, dll.

Terus terang, itu juga sangat mengasyikkan bagi saya untuk mengompres dan mengekstrak file dengan menuliskan code saya sendiri. Saya harap kamu menikmati tutorial, dan jika kamu memiliki pertanyaan, silahkan beritahu saya di dalam komentar.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.