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.