Artikel ini bagian dari seri Belajar Python Level Basic di hanifmu.com. Di artikel sebelumnya kita sudah membahas Membangkitkan Exception. Sekarang kita simpan dan ambil data dari luar program.
Selama ini data yang kita olah hanya hidup di memori. Begitu program ditutup, semuanya hilang. File memberi program ingatan yang bertahan, dan langkah pertamanya adalah membaca.
Membuka File dengan open()
Function open() membuka file dan mengembalikan objek file yang bisa dipakai untuk membaca atau menulis:
file = open("catatan.txt", "r")
isi = file.read()
print(isi)
file.close()
Baris open("catatan.txt", "r") berarti buka file bernama catatan.txt dalam mode baca. Setelah selesai, file harus ditutup dengan close().
Parameter pertama adalah nama atau path file. Kalau file berada di folder yang sama dengan skrip, cukup tulis namanya. Kalau di folder lain, sertakan pathnya:
file = open("data/catatan.txt", "r")
Mode File
Parameter kedua menentukan cara file dibuka. Beberapa mode yang paling sering dipakai:
| Mode | Arti |
|---|---|
"r" | Baca saja, error kalau file tidak ada |
"w" | Tulis, menimpa isi lama |
"a" | Tambah di akhir file |
"r+" | Baca dan tulis |
"rb" | Baca dalam mode biner |
Kalau mode tidak ditulis, Python memakai "r" sebagai default. Di artikel ini kita fokus pada mode baca.
read()
read() membaca seluruh isi file sekaligus dan mengembalikannya sebagai satu string:
file = open("catatan.txt", "r")
isi = file.read()
file.close()
print(isi)
Kalau file berisi:
Baris pertama
Baris kedua
Baris ketiga
Outputnya persis seperti itu, termasuk karakter baris baru di antara baris.
read() juga bisa menerima jumlah karakter. read(5) hanya mengambil lima karakter pertama. Ini berguna untuk file besar yang tidak ingin dimuat seluruhnya.
readline()
readline() membaca satu baris per pemanggilan:
file = open("catatan.txt", "r")
print(file.readline()) # Baris pertama
print(file.readline()) # Baris kedua
print(file.readline()) # Baris ketiga
file.close()
Setiap pemanggilan mengembalikan baris berikutnya, lengkap dengan \n di akhirnya. Untuk membersihkan karakter baris baru, gunakan strip():
baris = file.readline().strip()
print(baris)
readlines()
readlines() membaca semua baris dan mengembalikannya sebagai list:
file = open("catatan.txt", "r")
baris = file.readlines()
file.close()
print(baris)
# ['Baris pertama\n', 'Baris kedua\n', 'Baris ketiga\n']
Karena hasilnya list, kamu bisa mengolahnya dengan for:
for baris in baris:
print(baris.strip())
Cara yang paling hemat memori untuk file besar adalah mengiterasi objek file langsung, karena isinya dibaca per baris:
file = open("catatan.txt", "r")
for baris in file:
print(baris.strip())
file.close()
Menangani File Tidak Ditemukan
Kalau file yang diminta tidak ada, Python membangkitkan FileNotFoundError. Inilah tempat ilmu error handling dari artikel sebelumnya berguna:
try:
file = open("data_hilang.txt", "r")
isi = file.read()
file.close()
print(isi)
except FileNotFoundError:
print("File tidak ditemukan, periksa kembali namanya")
Program tidak berhenti dan pengguna mendapat penjelasan yang jelas.
Cara lain adalah memeriksa dulu dengan os.path.exists():
import os
if os.path.exists("catatan.txt"):
file = open("catatan.txt", "r")
print(file.read())
file.close()
else:
print("File tidak ada")
Pendekatan try dan except umumnya lebih disukai karena menangani kasus secara langsung, termasuk saat file ada tapi tidak bisa dibaca.
Encoding dan Karakter
Secara default, Python memakai encoding sistem. Untuk teks berbahasa Indonesia yang berisi karakter khusus, menentukan encoding secara eksplisit membuat hasil lebih konsisten di semua komputer:
file = open("catatan.txt", "r", encoding="utf-8")
isi = file.read()
file.close()
print(isi)
encoding="utf-8" adalah pilihan yang aman untuk hampir semua kebutuhan.
Contoh Program: Menghitung Baris dan Kata
Mari baca sebuah file lalu hitung jumlah baris dan katanya:
# hitung_file.py
try:
file = open("catatan.txt", "r", encoding="utf-8")
baris = file.readlines()
file.close()
except FileNotFoundError:
print("File catatan.txt tidak ditemukan")
else:
jumlah_baris = len(baris)
jumlah_kata = sum(len(b.split()) for b in baris)
print(f"Jumlah baris: {jumlah_baris}")
print(f"Jumlah kata: {jumlah_kata}")
Dengan file berisi tiga baris di atas, hasilnya:
Jumlah baris: 3
Jumlah kata: 6
Program ini menggabungkan pembacaan file, penanganan error, dan pengolahan data dalam satu alur.
Kesalahan Umum Pemula
- Lupa menutup file — sumber daya tetap terpakai; nantinya
withmenyelesaikan ini. - Salah menulis nama file — memicu
FileNotFoundError; periksa huruf besar-kecil dan pathnya. - Mengira
readline()membaca semua baris — ia hanya mengambil satu baris per pemanggilan. - Lupa
strip()— karakter\nikut terbawa ke hasil pengolahan. - Membuka file mode
"r"padahal belum ada — mode"r"tidak membuat file baru, ia error.
Ringkasan
open()membuka file, parameter kedua menentukan modenya- Mode
"r"untuk membaca, dan file wajib ditutup denganclose() read()mengambil semua isi,readline()satu baris,readlines()semua baris sebagai list- Iterasi langsung pada objek file paling hemat untuk file besar
- Bungkus
open()dengantrydanexcept FileNotFoundErroragar program tidak berhenti - Tentukan
encoding="utf-8"untuk hasil yang konsisten
Langkah Selanjutnya
Kamu sudah bisa mengambil data dari file. Tapi data yang dibaca saja tidak berguna kalau tidak pernah ada yang menulisnya.
Artikel selanjutnya membahas Menulis File di Python, cara menyimpan hasil program ke file dengan mode w dan a.
