2.27. Membaca dan menulis#

File berada di disk; Python mengaksesnya melalui open(), yang mengembalikan objek file yang metodenya membaca dan menulis byte yang mendasarinya.

2.27.1. open dan mode#

Argumen pertama adalah path; yang kedua adalah mode -- string pendek yang memberi tahu Python bagaimana file akan digunakan:

  • "r" -- baca (default). Membuka file yang ada untuk dibaca.

  • "w" -- tulis. Membuat file baru atau memotong file yang ada menjadi kosong.

  • "a" -- append. Membuka file untuk menulis di akhirnya tanpa memotong.

  • "b" ditambahkan ke salah satu di atas ("rb", "wb", "ab") -- mode biner. Konten file berupa bytes daripada str.

f = open("notes.txt", "r")
text = f.read()
f.close()

2.27.2. Gunakan context manager#

Pola di atas membocorkan file handle jika ada yang melempar exception antara open() dan close. Solusinya adalah pernyataan with (lihat context managers):

with open("notes.txt") as f:
    text = f.read()

# f is closed here, even if read() failed

Ini adalah bentuk standar -- tulis dengan cara ini setiap saat.

2.27.3. Membaca#

Objek file mendukung beberapa gaya baca:

  • io.IOBase.read() -- baca seluruh file (atau N byte) dan kembalikan sebagai string tunggal (atau objek bytes).

  • io.IOBase.readline() -- baca satu baris, termasuk "\n" di akhir.

  • Mengiterasi file secara langsung menghasilkan baris satu per satu, dengan penggunaan memori yang jauh lebih kecil daripada membaca seluruh file sekaligus.

with open("log.txt") as f:
    for line in f:
        print(line.rstrip())

str.rstrip() menghapus baris baru di akhir sebelum mencetak sehingga output tidak memiliki spasi ganda.

2.27.4. Menulis#

Buka file dalam mode "w" dan gunakan io.IOBase.write():

with open("out.txt", "w") as f:
    f.write("hello\n")
    f.write("world\n")

io.IOBase.write() tidak menambahkan baris baru -- ia menulis persis byte (atau karakter, dalam mode teks) yang Anda berikan.

2.27.5. Teks vs biner#

Mode teks (default, "r" / "w" tanpa "b") mendekode byte yang masuk menjadi str menggunakan encoding default, dan mengkode str yang keluar kembali ke byte. Gunakan untuk konfigurasi, log, JSON -- apa pun yang merupakan teks.

Mode biner ("rb" / "wb") melewati langkah decode dan mengembalikan bytes. Gunakan untuk citra, catatan yang dikemas struct, tangkapan jaringan -- apa pun di mana setiap byte penting dan file tidak dapat dibaca manusia.

2.27.6. Menampilkan dan menghapus file#

Modul os mengekspos operasi filesystem yang tidak ada pada objek file itu sendiri:

import os

for name in os.listdir("/"):
    print(name)

Tangkap OSError di sekitar ini ketika file atau direktori mungkin tidak ada -- operasi ini adalah salah satu tempat umum exception muncul dalam skrip nyata.