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.