Membaca File
Python membaca dan menulis file melalui objek file. Dalam text mode, objek ini mendekode byte yang tersimpan menjadi string dengan encoding yang dipilih. Dalam binary mode, byte diteruskan tanpa perubahan.
Siapkan empat file teks UTF-8 di folder latihan: file.txt, data.txt, sample.txt, dan input.txt, masing-masing berisi Halo Python tanpa baris baru di akhir. Jalankan contoh baca sebelum contoh tulis, karena mode w mengganti isi file. Pada contoh posisi, pembacaan pertama menghasilkan Halo , pembacaan kedua Pyt, dan pembacaan ulang juga Pyt.
Membaca Seluruh Isi File
Method read() memuat seluruh sisa isi file ke dalam memori sekaligus:
# Membaca seluruh file teks UTF-8 sekaligus
with open('file.txt', 'r', encoding='utf-8') as f:
txt = f.read()
print(txt)
# Output:
# Halo Pythonopen() membuat objek file, read() mengambil teksnya, dan blok with menutup file secara otomatis ketika blok berakhir, termasuk ketika operasi terhenti oleh exception.
Membaca File Baris per Baris
Untuk file yang besar, membaca baris per baris lebih efisien karena tidak memuat seluruh file ke memori sekaligus.
# Membaca file teks UTF-8 baris per baris
with open('file.txt', 'r', encoding='utf-8') as f:
for line in f:
print(line, end='')
# Catatan: setiap baris mempertahankan karakter newline
# Parameter end='' mencegah penambahan newline tambahanSetiap baris mempertahankan newline di akhirnya jika karakter itu memang ada. Baris terakhir mungkin tidak memiliki newline. Pengaturan end='' mencegah print() menambahkan newline kedua.
Menulis ke File
Menulis ke file membuat data atau hasil perhitungan tetap tersimpan setelah program berhenti berjalan. Python membuka file dengan mode yang menentukan apakah isi lama diganti atau ditambah, lalu menulis lewat objek file yang dikembalikan.
Menulis String ke File
Contoh ini memakai mode w untuk mengganti seluruh isi file. Sepuluh pemanggilan write() berlangsung di dalam satu blok with sebelum file ditutup.
# Menulis string ke file teks UTF-8
with open('file.txt', 'w', encoding='utf-8') as f:
for i in range(1, 11):
f.write(f'Line {i}\n')
# File akan berisi:
# Line 1
# Line 2
# Line 3
# ... (sampai Line 10)Mengalihkan Output Print ke File
Kamu dapat mengalihkan output fungsi print() langsung ke file menggunakan parameter file.
# Mengalihkan output print ke file teks UTF-8
with open('file.txt', 'w', encoding='utf-8') as f:
for i in range(1, 21):
print("Line", i, file=f)
# File akan berisi output print yang dialihkan
# Line 1
# Line 2
# ... (sampai Line 20)Argumen file memakai kembali pemformatan print() sambil mengarahkan teks hasilnya ke objek file yang dipilih.
Mode Pembukaan File
Python menyediakan berbagai mode untuk membuka file sesuai dengan kebutuhan operasi yang akan dilakukan.
Sintaks Pembukaan File
# Membaca file teks yang sudah ada
with open('data.txt', 'r', encoding='utf-8') as f:
first_line = f.readline()
# Membuat file atau mengosongkan isi lamanya
with open('output.txt', 'w', encoding='utf-8') as f:
f.write('isi baru')
# Membuat file atau menambahkan data setelah isi yang ada
with open('log.txt', 'a', encoding='utf-8') as f:
f.write('peristiwa berikutnya\n')
# Membaca dan menulis file yang ada tanpa mengosongkannya saat dibuka
with open('data.txt', 'r+', encoding='utf-8') as f:
original = f.read()Mode menentukan apakah file harus sudah ada, apakah pembukaan file mengosongkan isi lama, dan operasi apa yang diizinkan. r dan r+ memerlukan file yang sudah ada. w membuat atau mengosongkan file, sedangkan a membuat atau menambahkan data. Sufiks b memilih binary mode yang tidak memakai encoding.
Method untuk Membaca File
Python menyediakan lebih dari satu cara membaca file, dan pilihannya bergantung pada berapa banyak isi yang dibutuhkan sekaligus serta apakah posisi baca perlu diperhatikan setelahnya. read() mengambil seluruh sisa isi atau paling banyak sejumlah karakter tertentu. readline() mengambil satu baris, sedangkan readlines() tanpa argumen memuat semua baris tersisa ke dalam list.
Method Read dengan Parameter
read() menerima argumen ukuran, sehingga kamu bisa mengambil sejumlah karakter setiap kali. Contoh ini membandingkan pembacaan paling banyak sepuluh karakter, seluruh isi, dan satu baris.
# Mencoba beberapa method pembacaan teks
with open('file.txt', 'r', encoding='utf-8') as f:
# Membaca paling banyak 10 karakter
s = f.read(10)
print("10 karakter:", s)
# Kembali ke awal dan membaca seluruh file
f.seek(0)
s = f.read()
print("Seluruh file:", s)
# Kembali lagi dan membaca satu baris beserta newline jika ada
f.seek(0)
s = f.readline()
print("Satu baris:", repr(s))Posisi File dan Pembacaan
File yang dibuka dengan mode r berawal pada posisi stream pertamanya. Pembacaan memajukan posisi tersebut. Dalam text mode, tell() dapat menghasilkan penanda posisi khusus. Simpan penanda itu dan berikan kembali kepada Python saat kamu memerlukan posisi yang sama.
# Demonstrasi posisi file
with open('sample.txt', 'r', encoding='utf-8') as f:
first_read = f.read(5) # Membaca paling banyak 5 karakter
saved_position = f.tell()
print("Bacaan pertama:", first_read)
second_read = f.read(3) # Melanjutkan dari posisi saat ini
print("Bacaan kedua:", second_read)
f.seek(saved_position) # Kembali ke posisi text stream yang disimpan
repeated = f.read(3)
print("Bacaan ulang:", repeated)Dalam text mode, read() dan readline() mengembalikan string serta menghasilkan '' ketika tidak ada teks tersisa. Dalam binary mode, keduanya mengembalikan bytes dan memakai b'' pada akhir file. Iterasi berhenti otomatis ketika mencapai akhir.
Penanganan File yang Aman
Statement with menutup file secara otomatis ketika blok selesai, termasuk saat operasi di dalam blok gagal.
# Menggunakan with statement untuk penanganan file aman
with open('file.txt', 'r', encoding='utf-8') as f:
content = f.read()
print(content)
# File otomatis tertutup setelah keluar dari blok with
# Menulis dengan with statement
with open('output.txt', 'w', encoding='utf-8') as f:
f.write("Hello World!")
f.write("\nBaris kedua")
# File otomatis tertutup dan disimpan
# Membaca dan menulis bersamaan
with open('input.txt', 'r', encoding='utf-8') as input_file, open('output.txt', 'w', encoding='utf-8') as output_file:
data = input_file.read()
output_file.write(data.upper())
# Kedua file otomatis tertutupStatement with menutup file setelah blok selesai, termasuk ketika program mengalami error. Dengan begitu, file tidak dibiarkan terbuka dan resource sistem dapat dilepas.