File dan Exception

Pada materi ini, kita akan belajar menggunakan files dalam Python, agar program dapat menyimpan dan menganalisa data lebih banyak lagi. Kita juga akan belajar mengenai exception, yaitu metode yang disediakan oleh Python, untuk mengatasi apabila terjadi error dalam program. Terakhir, kita akan mengenal json module, yang masih berhubungan dengan penyimpanan data dalam program, secara lebih terstruktur.


Membaca File

Sebuah file teks dapat menampung data yang sangat banyak. File sendiri, biasanya digunakan oleh program atau aplikasi analisa data. Namun tentu saja, kita bisa memanfaatkan file untuk tipe program apapun saat dibutuhkan. Misalkan, kita ingin membuat program untuk membaca konfigurasi yang disimpan dalam file, atau kita ingin menampilkan isi file menjadi format yang lebih menarik di web browser, dan seterusnya. Sebagai langkah awal, kita akan mempelajari cara membaca isi file. Membaca file dapat dilakukan secara keseluruhan maupun per baris, tergantung kebutuhan.

Membaca Seluruh Isi File

Sebelum masuk ke contoh program, pertama-tama kita akan membuat file yang terdiri dari beberapa baris teks, sebagai berikut:

Python
HTML
Pascal
CSS
Javascript
Assembly

Info di atas disimpan dalam file teks bernama bahasa.txt. Selanjutnya, kita akan membaca isi bahasa.txt secara keseluruhan, dan menampilkannya ke layar. Perhatikan program di bawah ini.

Reading File
Contoh Membaca File

Untuk membaca sebuah file, pertama-tama file perlu dibuka (di-open) dan disimpan sebagai sebuah objek. Perhatikan baris ke-3, yang merupakan syntax untuk membuka file:

with open('nama_file') as nama_objek

Pada contoh, nama file adalah bahasa.txt, dibuka dan disimpan sebagai objek file_obj. Salah satu method standar yang dimiliki objek file dalam Python adalah read(), yang berfungsi membaca seluruh isi objek file tersebut. Baris perintah content = file_obj.read() artinya membaca seluruh isi file_obj, dan menyimpannya dalam variable content. Kemudian pada baris ke-5, nilai variable content ditampilkan ke layar, dan hasilnya tentu saja isi teks bahasa.txt yang telah disiapkan sebelumnya.

Ada kalanya file yang ingin dibaca, tidak berada dalam satu direktori dengan program yang membaca file tersebut. Jika bahasa.txt berada dalam direktori yang berbeda dengan program read_file.py, maka program akan menampilkan pesan error. Untuk itu, ketika membuka file, kita perlu mengetahui lokasi file tersebut. Jika tidak berada dalam satu direktori dengan program, maka nama_file harus diisi dengan menyertakan path yang menunjukkan lokasi file tersebut, baik secara relative atau absolute.

Ketika menggunakan relative path, Python interpreter akan mencari file yang lokasinya relative terhadap lokasi program yang akan di-running. Sedangkan dengan absolute path, kita memberi lokasi file secara pasti kepada interpreter. Biasanya absolute path digunakan saat file berada dalam struktur direktori yang sangat berbeda dengan lokasi program.

Untuk mencontohkan penggunaan relative dan absolute path, kita pindahkan file bahasa.txt ke dalam folder baru bernama files. Di bawah ini adalah program read_file.py yang telah dimodifikasi untuk membaca isi file bahasa.txt di direktori yang baru.

Open File Path
Contoh Akses File Path

Perhatikan pada tab Output, isi file bahasa.txt ditampilkan sebanyak 2 kali, karena program memang dibuat demikian. Hasil print yang pertama adalah isi file yang dibuka dengan menggunakan relative path (baris ke-3). Hasil print berikutnya adalah is file yang dibuka dengan menggunakan absolute path (baris ke-9). Hal ini menunjukkan, metode apapun yang digunakan untuk mengakses file, akan memberi hasil yang sama saja.

Membaca File Per Baris

Pada metode di atas, isi file bahasa.txt yang terdiri dari 6 baris teks, dianggap sebagai satu String (variable content). Jika kita perlu memproses isi file tersebut per baris, maka kita gunakan looping for. Perhatikan contoh berikut ini.

Membaca File Per Baris

Pada contoh di atas, kita tidak lagi menggunakan method read(), namun menyimpan setiap baris file_obj dalam variable line menggunakan for, kemudian menampilkannya ke layar. Perhatikan bahwa output yang dihasilkan memiliki jeda baris kosong. Karena setiap baris pada teks file terdapat karakter “\n” yang tidak terlihat secara kasat mata. Karakter tersebut bisa kita hilangkan dengan menggunakan method rstrip(), yakni built in method untuk String pada Python, yang berfungsi menghilangkan karakter whitespace di akhir teks. Salinlah program di atas dengan mengubah baris ke-5 menjadi print(line.rstrip()), kemudian jalankan program dan lihat perbedaan hasilnya.

Menyimpan Isi File Dalam List

Ketika membaca file dengan keyword with, maka isi objek file tersebut hanya dapat diakses dalam blok with itu sendiri. Agar dapat digunakan di luar with, kita perlu menyimpannya ke dalam sebuah List. Python menyediakan method readlines(), yang berfungsi “mentransfer” baris-baris teks dari objek file ke dalam List. Perhatikan contoh program berikut ini.

Menyimpan File Ke List

Pada baris ke-4, perintah file_obj.readlines() artinya meng-copy baris-baris file_obj ke dalam teks. Ketika di-print (baris ke-6), maka tab Output menampilkan isi variable teks, yang berupa List. Perhatikan bahwa hasil dari readlines() pun membaca karakter newline (\n). Kita dapat menggunakan looping for terhadap List teks, dan menggunakan rstrip() untuk menghilangkan karakter tersebut. Selanjutnya, List yang sudah terbentuk, dapat digunakan oleh program untuk berbagai proses selanjutnya.


Menulis File

Untuk mengetahui atau menganalisa hasil sebuah program, sekalipun program sudah tidak running, kita bisa menyimpan output program tersebut ke dalam file. Selain untuk keperluan analisa, file tersebut bisa juga digunakan sebagai input bagi program lainnya.

Menulis Ke File Baru

Hampir sama dengan membaca file, untuk menulis kita perlu membuka file terlebih dahulu dengan keyword with open. Bedanya, di sini kita tambahkan parameter “write“, yang menunjukkan bahwa file dibuka untuk penulisan. Perhatikan program singkat berikut ini.

Writing File
Menulis Ke File

Perhatikan sedikit perbedaan sintaks with open pada baris ke-3. Di dalam perintah open untuk menulis file, parameter pertama adalah nama file yang akan ditulis, dan parameter kedua adalah karakter “w yang artinya write. Pada contoh di atas, jika file pets.txt belum ada, maka akan dibuat otomatis. Jika sudah ada, maka file pets.txt akan diganti dengan file baru. Karena itu, hati-hati dan perhatikan nama file yang akan ditulis, sebelum menjalankan program. Baris ke-4 dan ke-5, method write() dipanggil untuk menambahkan String/teks ke dalam pets.txt. Ketika program selesai dijalankan, tidak ada hasil yang ditampilkan pada tab Output. Namun, ada file pets.txt yang terbentuk dan telah berisi 2 buah baris teks sebagai berikut.

I love kittens.
She loves puppies.

Perlu dicatat bahwa, method write() tidak otomatis menambahkan karakter newline pada file, sehingga kita perlu menyisipkan “\n” pada teks yang ditambahkan. Jika tidak, maka pets.txt akan berisi dua kalimat, namun kalimat tersebut tergabung dalam satu baris teks.

I love kittens.She loves puppies.

Menambah Isi File

Jika kita ingin menambahkan isi file, dengan tidak “mengganti” atau menimpanya dengan yang baru, maka kita hanya perlu mengganti parameter kedua pada keyword open, dari “w” menjadi “a”. Perhatikan contoh program berikut ini.

Append File
Menambah Isi File

Perhatikan baris ke-3 pada contoh di atas, parameter “w” telah diganti dengan “a”. Sebelumnya kita sudah membentuk sebuah file pets.txt yang terdiri dari 2 baris teks. Jika contoh program di atas dijalankan, maka teks dalam pets.txt sebelumnya tetap ada, kemudian bertambah 1 baris baru, menjadi sebagai berikut.

I love kittens.
She loves puppies.
Who doesn't?

Exceptions

Pada contoh-contoh program di atas, kita belum menangani kemungkinan terjadinya kesalahan pada file yang digunakan. Misalkan saja, ternyata file yang akan dibaca atau ditambahkan tidak ada. Jika kondisi tersebut ditemukan, makan program akan berhenti mendadak dan menampilkan pesan error.

Dalam Python, kondisi error tersebut dapat “ditangkap” dengan exceptions. Exceptions akan menangani error yang muncul ketika program sedang berjalan. Jika sebuah program mampu menangkap error yang terjadi, maka program tersebut tidak akan berhenti, dan baris perintah berikutnya tetap dapat dijalankan. Exceptions pada Python dilakukan dalam blok try-except.

try:

    certain command to execute

except ErrorType:

    print/do something if command in block try failed

Di dalam lingkup try, program mencoba melakukan baris perintah tertentu. Jika ternyata perintah yang coba dilakukan menyebabkan ErrorType tertentu, maka alur akan menuju blok except, dan perintah dalam lingkup blok except akan dijalankan, misalkan menampilkan pesan error yang baru saja dialami. Tipe error pada program bermacam-macam. Kita bisa mengetahuinya, dengan menjalankan program yang belum ada penanganan error. Sebagai contoh, program berikut membuka file bahasa.txt yang tidak ada.

Error FileNotFound
Contoh Error Pada Program

Perhatikan pada tab Output, terjadi kesalahan FileNotFoundError. Tipe error tersebut terjadi jika file yang hendak diakses tidak ditemukan oleh interpreter, bisa karena kesalahan nama file, kesalahan lokasi file, atau memang file tersebut tidak ada. Setelah mengetahui tipe error-nya, sekarang kita tambahkan exception pada program di atas menggunakan try-except blok. Perhatikan program berikut ini.

Try Except
Contoh Exception File Not Found

Pada contoh di atas, untuk menangani error, kita meletakkan perintah with open ke dalam blok try. Saat interpreter tidak berhasil menemukan bahasa.txt, maka alur program akan melompat ke blok except FileNotFoundError, dan perintah print di dalamnya dijalankan. Di sini kita mendapat pesan yang lebih “user friendly“, yakni anjuran untuk  memeriksa kembali file yang coba dibuka. Pesan tersebut tentu saja lebih nyaman dibaca oleh pengguna program, dibandingkan pesan traceback error yang membuat program berhenti secara paksa.

Blok try-except dapat ditambahkan dengan kondisi else, sehingga menjadi try-except-else.

try:     

    certain command to execute

except ErrorType:     

    print/do something if command in block try failed 

else:

    code to execute if command in block try successful without error

Blok else tersebut berperan untuk menjalankan perintah lanjutan, apabila perintah yang coba dijalankan pada blok try berhasil. Perhatikan contoh program berikut.

Try Except Else
Contoh Exception Menggunakan Try-Except-Else

Pada program di atas, perintah membuka dan membaca isi file pets.txt diletakkan dalam blok try. Jika file pets.txt tidak ditemukan, maka pesan “File pets.txt tidak ditemukan….” akan muncul dilayar. Namun, karena file pets.txt pada direktori files sudah dipersiapkan sebelumnya, program berjalan mulus tanpa FileNotFoundError. Sehingga, setelah blok perintah dalam try dijalankan, alur program mengarah ke blok else, dimana isi file yang telah disimpan dalam List teks, ditampilkan ke layar.

Selain FileNotFoundError, masih banyak tipe-tipe error lainnya, yang tidak perlu dihafal satu per satu. Sebagai permulaan, kita dapat mengetahui tipe error melalui pesan traceback yang muncul saat program crashed.

Note: Jika kita tidak ingin menampilkan pesan apapun ketika error terjadi, maka kita dapat mengosongkan baris perintah di bawah blok except, lalu mengetikkan keyword pass sebagai gantinya. Hal ini biasanya dilakukan pada program yang lebih kompleks, di mana pesan error yang terjadi, dianggap tidak bermanfaat untuk diinformasikan kepada pengguna program.


JSON Module

Selain menyimpan teks, Python juga menyediakan JSON module, yang berguna untuk meng-export struktur data seperti List atau Dictionary ke dalam file. JSON sendiri singkatan dari Javascript Object Notation. Berdasarkan namanya, JSON awalnya digunakan oleh bahasa pemrograman Javascript. Namun lama kelamaan, format tersebut sering digunakan oleh bahasa pemrograman lainnya, termasuk Python. Module JSON pada Python, memungkinkan kita untuk mentransfer maupun mengambil struktur data dari sebuah file. Data yang disimpan dengan JSON module, dapat digunakan oleh program lain, termasuk program yang ditulis dengan bahasa selain Python. Hal ini dikarenakan format JSON yang bersifat universal.

Json.dump() dan Json.load()

Kita akan membuat program sederhana, untuk meng-export List ke dalam file menggunakan json.dump(). Perhatikan program dumping.py di bawah ini.

JSON dump
Menyimpan Dictionary Dengan JSON Dump

Karena JSON adalah sebuah built-in module dari Python, maka hal pertama yang dilakukan program adalah meng-import module json (baris ke-1). Kemudian program mendefinisikan player1 yang berstruktur data Dictionary, dan akan disimpan dalam filenameplayer1.json‘. Setelah file player1.json dibuka dengan parameter write (baris ke-9), program memanggil json.dump() untuk menyimpan player1 ke dalam file tersebut. Setelah program dijalankan, maka file player1.json akan terbentuk. Untuk melihat isinya, bukalah file tersebut menggunakan teks editor di komputer masing-masing.

Sekarang, kita akan mencoba mengambil data yang tadi sudah disimpan, menggunakan json.load(). Perhatikan program loading.py di bawah ini.

JSON Load
Membaca Dictionary dengan JSON Load

Pada contoh di atas, setelah file player1.json dibuka, program memanggil json.load() untuk mengambil data dari file_obj ke variable player1. Ketika ditampilkan ke layar (baris ke-8), player1 adalah data dengan struktur Dictionary, sesuai dengan program sebelumnya.

Penggunaan module JSON pada materi ini adalah salah satu contoh sederhana saja. Kalian dapat mengembangkan program sendiri, misalkan dengan membuat Fungsi untuk menerima input dari user, kemudian menyimpan input tersebut ke dalam List atau Dictionary. Selanjutnya List atau Dictionary tersebut dapat di-dump ke file tertentu, untuk selanjutnya diakses oleh program lain, bilamana diperlukan.


Sampai di sini, kita sudah selesai mempelajari semua materi dasar Python. Apa yang telah disampaikan, selanjutnya dapat menjadi patokan, untuk mengeksplorasi bahasa Python lebih jauh. Ada banyak built-in module dan library-library Python yang bisa kalian pelajari dan gunakan, sesuai dengan tipe aplikasi yang ingin dikembangkan. Mulailah berlatih membuat program-program interaktif, atau aplikasi sederhana untuk menyelesaikan task-task tertentu. Dengan banyak latihan, kamu bisa menguasai bahasa Python dengan lebih cepat. Selamat berkreasi!


 

What do you think? Leave a Comment Below.

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

Up ↑

%d bloggers like this: