Anda di halaman 1dari 9

Akses berkas file

Konsep Berkas 

Berkas dalam sebuah komputer digunakan untuk menyimpan data, program aplikasi atau paket
program. Berkas data pada umumnya dibagi menjadi dua macam yaitu:

1. Berkas teks (text file)


Berkas teks yaitu berkas yang berisi tulisan dan huruf) dan berkas biner (yaitu berkas
yang berisi objek). Berkas teks dapat dibuka dengan editor teks seperti Notepad, Nano
atau GEdit.
2. Berkas biner (binary file)
Berkas biner harus dibuka oleh aplikasi tertentu yang kompatibel. Jika sebuah berkas
tidak bisa dibuka dengan editor teks, maka berkas tersebut adalah berkas biner.
Contoh berkas biner adalah
- Berkas dokumen Office (misalnya *.doc, *.odt, *.xls, *.ods)
- Berkas gambar (misalnya *.bmp, *.jpg)
- Berkas suara (misalnya *.mp3), dan
- Berkas video (misalnya *.mp4, *mkv)

Untuk mengakses data pada berkas biner, harus diketahui format atau tata cara
penyimpanan datanya.Sebagian berkas biner sudah mengalami pengolahan sebelum
disimpan sehingga diperlukan algoritma tertentu untuk mengakses data yang tersimpan.

Pada prinsipnya terdapat dua aktivitas dasar dalam mengakses berkas, yaitu menulis
data (write) ke dalam berkas dan membaca data (read) dari berkas. Pengolahan data pada
berkas terdiri atas tiga langkah dasar yaitu:

1. Membuka berkas, dengan perintah open

2. Menyimpan data ke berkas atau membaca data dari berkas, dengan perintah terkait dengan
read dan write

3. Menutup berkas, dengan perintah close

Akses terhadap berkas teks

Untuk membuka sebuah berkas, perintah bisa diberikan agar Python berkomunikasi dengan
sistem operasi komputer dan meminta berkasnya. Dalam contoh berikut, file  tulis.txt  berada
di folder yang sama dengan program Python tersebut.

1. # Menulis data ke dalam berkas


2. berkas = open(“tulis.txt”, “w”)
3. berkas.write(“Data ini tersimpan di berkas.“)
4. berkas.write(“Kalimat ini juga tersimpan di berkas.”)
5. berkas.close()

Pada kode di atas, sistem operasi  kemudian mencari file yang dimaksud menurut alamat file
yang telah diberikan, yaitu  tulis.txt . Kemudian kita masukkan ke dalam file handle  berkas .
File handle adalah nama atau pengenal berkas sementara yang ditetapkan kepada berkas yang
terbuka, yang saat ini sedang digunakan oleh sistem operasi.

Setiap akses terhadap berkas teks dimulai dengan membuka berkas dengan instruksi  open() ,
Instruksi  open()  menerima dua parameter. Parameter pertama adalah nama direktorinya dari
berkas, dan parameter kedua adalah mode akses. Mode akses berkas teks ada tiga macam,
yaitu:

1. “w” : berkas diakses untuk menulis data pada berkas tersebut.


Jika nama berkas sudah ada, maka berkas lama akan dihapus. Jika belum ada, maka
program akan membuat sebuah berkas baru. 
2. “r”: berkas diakses untuk dibaca.
3. “a”: berkas diakses untuk menulis data pada berkas tersebut.
Jika nama berkas sudah ada, maka data baru akan ditambahkan (append) di bagian
akhir berkas. Jika belum ada, maka program akan membuat sebuah berkas baru. 

Catatan: Jika mode akses kosong, maka nilai defaultnya adalah 'r'.

Pada program di atas, baris ke-2 menginstruksikan membuka berkas


bernama  “tulis.txt”  dan berkas dibuka dengan mode  “w”  yaitu untuk menyimpan (menulis)
data. Baris 3 dan 4 merupakan instruksi  .write()  untuk menyimpan (menulis) teks ke dalam
berkas. Baris 5 berisi instruksi  .close()  untuk menutup berkas. Berkas yang sudah ditutup
tidak dapat dibaca dan ditulisi.

Perlu anda perhatikan, jika berkas yang diminta tidak ada, maka akan terjadi error berikut.

Traceback (most recent call last):


File "<stdin>", line 1, in <module>
IOError: [Errno 2] No such file or directory: 'tidakada.txt'

Terdapat lima instruksi / method dasar dalam mengolah berkas teks sebagaimana tercantum
pada tabel berikut.

Instruksi Penggunaan
write() Menulis satu kalimat. Parameter berupa satu string.
writelines() Menulis satu atau banyak kalimat. Parameter berupa deretan string atau list.
read() Membaca karakter/huruf dari berkas. Jika diberi parameter angka, parameter menunjukkan jum
karakter yang dibaca. Tanpa parameter, yang dibaca adalah seluruh karakter di dalam berkas.
Perhatikan bahwa simbol ganti baris atau newline ('\n') dihitung sebagai karakter.
readline() Membaca satu baris teks. Jika diberi parameter angka, parameter menunjukkan jumlah maksim
dibaca.
readlines() Membaca banyak baris teks sekaligus dan data kembaliannya berupa list. Jika diberi paramete
menunjukkan jumlah maksimal karakter yang dibaca.

Membaca file yang sudah ada

File handle tidak berisi data file. Jika kita menjalankan  print(berkas) , program akan
mencetak   <open file 'tulis.txt', mode 'r' at 0x7f20c47dd540>  atau variasinya
sebagai output.

Untuk membaca isi dari berkas tersebut, kita perlu membuat file handle dengan mode
akses  "r"  pada saat membuka berkas dengan perintah  open() . Kemudian, kita berikan
instruksi / method  read() ,  readline() , atau  readlines()  pada file handle yang telah dibuat.
Selain itu, kita juga bisa menerapkan iterasi for untuk membaca berkas baris demi baris.

Perhatikan contoh kode berikut, yang membuka berkas  kabar.txt :

1. r1 = open(“kabar.txt”, “r”) #Membuka berkas "kabar.txt" dengan mode 'r'


2. print("--Seluruh teks--")
3. print(r1.read()) #Membaca seluruh isi berkas
4. r1.close()
5.  
6. r1 = open(“kabar.txt”, “r”) #Membuka berkas "kabar.txt" dengan mode 'r'
7. print("--150 karakter--")
8. print(r1.read(150)) #Membaca 150 karakter pertama pada isi berkas
9. r1.close()

Output:

--Seluruh teks--

Jakarta, CNN Indonesia -- Satuan Tugas Penanganan Covid-19 membutuhkan tambahan


seribu relawan medis untuk mengantisipasi peningkatan penularan Covid-19. Penambahan
kasus yang terjadi saat ini sudah membuat relawan kelelahan.
Ketua Bidang Koordinasi Relawan Satuan Tugas Penanganan Covid-19 Andre Rahadian
mengungkapkan, kini pendaftaran relawan untuk memenuhi kebutuhan ini sedang dibuka.
Mereka yang kelak bergabung sebagai relawan medis akan ditempatkan di rumah sakit rujukan
Covid-19 dan wisma isolasi mandiri.

"Untuk amannya, antisipasi ke depan kami mencari seribu relawan lagi," ucapnya dalam
Talkshow 'Kolaborasi Sebagai Strategi Lawan Covid-19' yang digelar di Media Center Satgas
Covid-19 di Graha BNPB Jakarta pada Jumat (11/12).
--150 karakter--

Jakarta, CNN Indonesia -- Satuan Tugas Penanganan Covid-19 membutuhkan tambahan


seribu relawan medis untuk mengantisipasi peningkatan penularan Covid-

Pada contoh diatas, method  read()  membaca seluruh isi pada berkas. Nah, ketika kita ingin
membaca 150 karakter pertama dari berkas, kita dapat menambahkan maksimal karakter (150)
pada method  read() .

Kemudian, kita juga bisa membaca baris pertama dari suatu berkas dengan  readline()  .
Perhatikan contoh berikut:

1. r1 = open(“kabar.txt”, “r”) #Membuka berkas "kabar.txt" dengan mode 'r'


2. print(r1.readline()) #Membaca baris pertama isi berkas teks
3. r1.close()

Output:

Jakarta, CNN Indonesia -- Satuan Tugas Penanganan Covid-19 membutuhkan tambahan


seribu relawan medis untuk mengantisipasi peningkatan penularan Covid-19. Penambahan
kasus yang terjadi saat ini sudah membuat relawan kelelahan.

Pada contoh diatas, method  readline()  membaca baris pertama pada berkas
teks  "kabar.txt" . Jadi yang ditampilkan hanya baris pertama saja, seluruh karakter sebelum
baris baru / newline  ('\n') .

Nah sekarang bagaimana jika kita ingin menghitung jumlah baris pada suatu berkas teks?
Caranya kita bisa kombinasikan  readlines()  dan iterasi for. Method  readlines()  membaca
seluruh baris teks sekaligus dan mengembalikannya dalam bentuk list.

Pada contoh berikut jika program dijalankan, maka outputnya adalah 4, yang berarti
berkas  "kabar.txt"  terdiri dari 4 baris.

1. r1 = open(“kabar.txt”, “r”) #Membuka berkas "kabar.txt" dengan mode 'r'


2.  
3. ls = r1.readlines() #Membaca seluruh baris pada teks dan
mengembalikannya dalam tipe data list
4.  
5. count = 0
6. for line in ls:
7. count += 1
8. print(count)
9.  
10. r1.close()

 
Membuat dan menulis file baru

Untuk membuat sebuah berkas, gunakan  open() , tapi kali ini dengan dengan  'w'  sebagai
parameter kedua. Jika berkas tersebut belum ada, maka akan dibuat sebuah berkas baru. Jika
sudah ada, maka berkas yang lama akan dihapus. Sedangkan jika kita menggunakan mode "a"
sebagai parameter kedua, maka

Metode  .write()  menambahkan data ke ujung akhir file.

fwrite.write('Baris baru!\n')

Sebagai contoh, program berikut akan menghasilkan berkas  dokumen.txt

1. dok = open('dokumen.txt', 'w')


2. dok.write(“Data ini tersimpan di berkas. “)
3. dok.write(“Kalimat ini juga tersimpan di berkas.”)
4. dok.close()

Pada kode di atas, program mengakses berkas dokumen.txt, kemudian berkas tersebut masuk
ke dalam mode "w". Kemudian kita menuliskan teks dengan method  .write() pada berkas
dokumen.txt. Terakhir, berkas dokumen.txt ditutup. Sehingga, dalam berkas dokumen.txt, kita
mendapatkan data sebagai berikut:

Data ini tersimpan di berkas. Kalimat ini juga tersimpan di berkas.

Kemudian kita coba jalankan program berikut terhadap berkas  dokumen.txt

1. dok = open('dokumen.txt', 'w')


2. dok.write(“Data berikut ini tersimpan di berkas. “)
3. dok.write(“Kalimat berikut ini juga tersimpan di berkas.”)
4. dok.close()

Maka, dalam berkas dokumen.txt, kita mendapatkan data sebagai berikut ini. Data yang
sebelumya telah terhapus.

Data berikut ini tersimpan di berkas. Kalimat berikut ini juga tersimpan di berkas.

Bagaimana cara kita menambahkan data tanpa harus menghapus data yang sudah ada pada
berkas dokumen.txt? Kita bisa gunakan mode  "a"  terhadap berkas  dokumen.txt

1. dok = open('dokumen.txt', 'a')


2. dok.write(“ File berikut ini tersimpan di berkas. “)
3. dok.write(“Naskah berikut ini juga tersimpan di berkas.”)
4. dok.close()
Maka, dalam berkas dokumen.txt, kita mendapatkan data sebagai berikut ini. Data yang
sebelumya telah ditambahkan oleh data lain yang diproses menggunakan mode "a".

Data berikut ini tersimpan di berkas. Kalimat berikut ini juga tersimpan di berkas. File berikut ini
tersimpan di berkas. Naskah berikut ini juga tersimpan di berkas.

Akses terhadap berkas biner

Untuk mengakses berkas biner, caranya hampir sama dengan berkas teks. Setiap akses
terhadap berkas biner dimulai dengan membuka berkas dengan instruksi  open() ,
Instruksi  open()  menerima dua parameter. Parameter pertama adalah nama direktorinya dari
berkas, dan parameter kedua adalah mode akses. Mode akses berkas teks ada tiga macam,
yaitu:

1. “wb” : berkas biner diakses untuk menulis data pada berkas tersebut.
Jika nama berkas sudah ada, maka berkas lama akan dihapus. Jika belum ada, maka
program akan membuat sebuah berkas baru. 
2. “rb”: berkas biner diakses untuk dibaca.
3. “rb+”: berkas biner bisa diakses untuk menulis data pada berkas tersebut ataupun
membacanya.

Perhatikan contoh kode berikut ini.

1. file = open('/Users/Documents/myfile.bin', 'wb')


2.  
3. ls_angka = [1.5, 2.8, 3.3]
4.  
5. for item in ls_angka:
6. s = str(item) + '\n'
7. bt = s.encode()
8. file.write(bt)
9.  
10. file.close();

Pada kode di atas, sistem operasi  kemudian mencari file yang dimaksud menurut alamat file
yang telah diberikan, yaitu  myfile.bin . Kemudian kita masukkan ke dalam file handle f
dengan mode wb, yang memungkinkan kita untuk menulis data ke dalam berkas biner.

Pada program di atas, baris ke-1 menginstruksikan membuka berkas


bernama  “myfile.bin”  dan berkas dibuka dengan mode  “wb”  yaitu untuk menyimpan
(menulis) data pada berkas biner. Pada baris ke-3, kita membuat sebuah list  ls_angka =
[1.5, 2.8, 3.3] . Pada baris ke-5, terdapat iterasi, kita membaca tiap elemen pada
list  ls_angka , kemudian pada baris ke-6, untuk setiap item pada list  ls_angka , dikonversikan
menjadi string. Kemudian baris ke-7 mengkonversikan string menjadi tipe bytes. Pada baris ke-
8, kita menuliskan karakter dengan tipe bytes ke dalam  "myfile.bin"  melalui file handle  file .
Teruskan iterasi sampai selesai.

Sekarang kita coba membaca berkas biner.

1. ls_angka_2 = []
2.  
3. r = open('/Users/Documents/myfile.bin', 'rb')
4.  
5. for ln in r:
6. x = float(ln)
7. ls_angka_2.append(x)
8.  
9. print("List angka = ", ls_angka_2)
10.  
11. r.close();

Pada program di atas, baris ke-1 menginstruksikan membuka berkas


bernama  “myfile.bin”  dan berkas dibuka dengan mode  “rb”  yaitu untuk membaca data
pada berkas biner. Pada baris ke-3, kita membuat list kosong  ls_angka_2 yang akan
menampung data pada berkas biner. Kemudian pada baris ke-5, terdapat iterasi, kita membaca
tiap data bytes yang tersimpan pada berkas biner  "myfile.bin" . Kemudian pada baris ke-6,
data yang tersimpan dalam tipe bytes dikonversikan menjasi float. Pada baris ke-7, nilai yang
sudah bertipe float dimasukkan ke dalam list  ls_angka_2 menggunakan perintah  append() .
Iterasi diteruskan sampai selesai. Sehingga pada baris ke-9, kita mendapatkan
list  ls_angka_2 yang bernilai  [1.5, 2.8, 3.3] .

Nah sekarang cobalah kerjakan soal berikut ini. Disini kita akan mencoba menuliskan kode
bytes sehingga tersimpan sebuah berkas biner gambar.

Apabila diketahui kode sebagai berikut, isilah titik-titik yang ada pada method write() dengan isi
binary.txt di bawah. Kemudian, periksalah di directory anda. Gambar apa yang dihasilkan?

1. bw = open('/Users/Documents/gambar.jpg', 'wb') #Sesuaikan dengan


direktori anda
2. bw.write(.......)

shelve

shelve  adalah modul Python yang memungkinkan terdapat nilai-nilai yang melekat pada
kunci / key dari suatu objek. Pada modul  shelve , sebuah key dapat memiliki banyak
nilai / value. Saat kita membuat suatu objek, kita harus menentukan key,  bersama  dengan nilai-
nilai dari key objek tersebut. Modul  shelve  menghasilkan berkas biner. Dengan cara ini, berkas
biner dari  shelve  menjadi database berisi values yang tersimpan.
Akses data dengan cara  shelve  lebih fleksibel karena proses pembacaan data tidak harus urut
sesuai urutan penulisan data (tidak mengenal indeks). Akses dilakukan dengan cara yang mirip
dengan mengakses data pada sebuah variabel bertipe dictionary. Akses data dilakukan dengan
menyebut key nya. 

Berikut ini contoh program menyimpan dan membaca data


dengan  shelve  untuk  rak.data . Adapun berkas yang tersimpan menjadi  rak.data.db .

1. import shelve
2. f = shelve.open("/Users/Documents/rak.data")
3. f["produk"] = ["sepatu", "tas", "dompet"] #menyimpan data
4. f["merk"] = ("Buccheri", "Gucci", "Coach")
5. f["harga"] = [500000, 850000, 350000]
6. f.close() # menutup berkas
7.  
8. f = shelve.open("/Users/Documents/rak.data") # membuka berkas
9. print("Produk:", f["produk"]) # membaca data
10. print("Harga:", f["harga"]) # akses data mirip Dictionary
11. print("Merk:", f["merk"]) # tidak harus urut
12.  
13. print(f["merk"][2])
14. f.close()

Output

Produk: ['sepatu', 'tas', 'dompet']


Harga: [500000, 850000, 350000]
Merk: ('Buccheri', 'Gucci', 'Coach')
Coach

Pada program di atas, baris pertama melakukan import modul  shelve . Kemudian baris ke-2
membuka berkas  "rak.data"  dan kita masukkan ke dalam objek file handle  f .
Jika  "rak.data"  belum ada, maka program akan membuat berkas  "rak.data"  secara
otomatis. Kemudian pada baris ke-3 sampai baris ke-5, kita tentukan key dari object, bersama
dengan nilai yang melekat pada tiap key. Disini kita mempunyai key-value sebagai berikut:

Key Value
produk 'sepatu', 'tas', 'dompet'
merk 'Buccheri', 'Gucci', 'Coach'
harga 500000, 850000, 350000
Urutan penyimpanan key pada objek adalah “produk”, “merk” dan “harga”, sedangkan data
dibaca dengan urutan yang berbeda, yaitu “produk”, “harga”, dan “merk”. Pada baris ke-6, kita
menutup file  "rak.data" .

Kemudian, pada baris ke-8 kita membuka file  "rak.data"  kembali. Pada baris ke-9, value
yang menempel pada key "produk" dicetak. Pada baris ke-10, value yang menempel pada key
"harga" dicetak. Pada baris ke-11, value yang menempel pada key "merk" dicetak. 

Pada baris ke-13, kita mencetak elemen indeks ke-2 dari value yang melekat pada key "merk".
Nilai dari key "merk" adalah  ("Buccheri", "Gucci", "Coach")  - yang berupa tuple.
Sehingga, data yang ditampilkan adalah "Coach". Pada baris ke-14, kita menutup
file  "rak.data" .

Anda mungkin juga menyukai