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 berupabytesdaripadastr.
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:
os.listdir()-- mengembalikan daftar nama dalam direktori.os.remove()-- menghapus file.os.rename()-- mengganti nama file.os.stat()-- metadata file (ukuran, waktu modifikasi, ...).os.mkdir()-- membuat direktori baru.
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.