Membaca File dengan Python

Pengantar

Untuk bekerja dengan data yang tersimpan, penanganan file menjadi pengetahuan inti dari setiap programmer Python profesional. Sejak rilis paling awal, membaca dan menulis data ke file adalah fitur bawaan Python. Dibandingkan dengan bahasa pemrograman lain seperti C atau Java, ini cukup sederhana dan hanya membutuhkan beberapa baris kode. Selain itu, tidak ada modul tambahan yang harus dimuat untuk melakukannya dengan benar.

Pada artikel ini kami akan menjelaskan cara membaca file dengan Python melalui contoh. Beberapa contoh termasuk membaca file baris demi baris, sebagai potongan (jumlah baris yang ditentukan pada satu waktu), dan membaca file sekaligus. Juga, kami akan menunjukkan kepada Anda cara membaca baris tertentu dari file saja, tanpa mencari seluruh file.

Dasar-dasar File dengan Python

Metode umum untuk mengoperasikan file adalah open() untuk membuka file, seek() untuk mengatur posisi file saat ini pada offset yang diberikan, dan close() untuk menutup objek file setelah Anda selesai menggunakannya. built-in open() fungsi mengembalikan pegangan file yang mewakili objek file yang akan digunakan untuk mengakses file untuk membaca, menulis, atau menambahkan.

Saat membuka file untuk dibaca, Python perlu tahu persis bagaimana file harus dibuka dengan sistem. Tersedia dua mode akses โ€“ membaca dan membaca dalam mode biner. Bendera masing-masing yang digunakan adalah 'r', dan 'rb', dan harus ditentukan saat membuka file dengan built-in open() fungsi. Mode pertama mencakup interpretasi karakter khusus seperti "CR" (carriage return) dan "LF" (linefeed) untuk mewakili jeda baris, sedangkan mode biner memungkinkan Anda membaca data dalam mode mentah - di mana data disimpan apa adanya. tanpa interpretasi lebih lanjut.

Setelah Anda membuka file, open() fungsi akan mengembalikan objek file kepada Anda. Objek file ini memiliki metode seperti read(), readline(), write(), tell(), dan seek(). Sementara beberapa objek file (atau objek seperti file) memiliki lebih banyak metode daripada yang tercantum di sini, ini adalah yang paling umum. Tidak semua objek file perlu mengimplementasikan semua metode file.

Membaca File Baris demi Baris

Contoh pertama terinspirasi oleh dua bahasa pemrograman โ€“ C dan C++. Ini mungkin pendekatan yang paling intuitif โ€“ buka file menggunakan open() fungsi, baca file baris demi baris menggunakan readline() metode, dan keluarkan baris segera setelah membaca.

Yang digunakan di sini adalah while loop yang terus membaca dari file selama readline() metode terus mengembalikan data. Jika akhir file (EOF) tercapai, while loop berhenti dan objek file ditutup, membebaskan sumber daya untuk digunakan program lain:


filename = "test.txt"

filehandle = open(filename, 'r')
while True:
    
    line = filehandle.readline()
    if not line:
        break
    print(line)


filehandle.close()

Seperti yang mungkin telah Anda catat, kami secara eksplisit membuka dan menutup file dalam contoh ini. Meskipun interpreter Python menutup file yang dibuka secara otomatis pada akhir eksekusi program Python, secara eksplisit menutup file melalui close() adalah gaya pemrograman yang bagus, dan tidak boleh dilupakan.

Sebagai perbaikan, protokol iterator yang nyaman diperkenalkan di Python 2.3. Ini memungkinkan Anda untuk menyederhanakan readline lingkaran:


filename = "test.txt"
for line in open(filename, 'r'):
    print(line)

Yang digunakan di sini adalah for loop dalam kombinasi dengan in pengulangan. Baris saat ini diidentifikasi dengan bantuan in iterator, baca dari file, dan isinya adalah output ke stdout. Python mencakup pembukaan dan penutupan file untuk Anda ketika berada di luar jangkauan. Meskipun tidak efisien, ini memungkinkan Anda untuk tidak lagi berurusan dengan pegangan file.

Sayangnya, kode di atas kurang eksplisit dan bergantung pada pengumpulan sampah internal Python untuk menangani penutupan file.

Diperkenalkan dengan Python 2.5, the with perintah merangkum seluruh proses bahkan lebih, dan juga menangani membuka dan menutup file hanya sekali di seluruh blok kode cakupan:


filename = "test.txt"
with open(filename, 'r') as filehandle:
    for line in filehandle:
        print(line)

Kombinasi dari with pernyataan dan open() perintah membuka file hanya sekali. Jika berhasil for loop dieksekusi, dan konten baris dicetak pada stdout.

Selanjutnya, penggunaan with pernyataan memiliki efek samping. Secara internal, juru bahasa Python membuat a try-finally-block untuk merangkum pembacaan dari file. Contoh berikut menunjukkan apa yang pada dasarnya terjadi secara internal di Python dengan with blok kode:

try:
    filehandle = open(filename, 'r')
    
finally:
    filehandle.close()

Membaca File sebagai Potongan Garis

Sampai sekarang, kami telah memproses file baris demi baris. Ini agak lambat untuk file besar dan dapat ditingkatkan dengan membaca beberapa baris secara bersamaan. Untuk mencapai itu, islice() metode dari alat bantu modul ikut bermain. Juga, ini berfungsi sebagai iterator dan mengembalikan sepotong data yang terdiri dari n garis. Di akhir file, hasilnya mungkin lebih pendek, dan akhirnya, panggilan akan mengembalikan daftar kosong:

from itertools import islice

filename = "test.txt"

number_of_lines = 5

with open(filename, 'r') as input_file:
    lines_cache = islice(input_file, number_of_lines)
   
    for current_line in lines_cache:
        print (current_line)

Membaca Baris Tertentu dari File

Dengan menggunakan metode yang ditunjukkan di atas, kita juga dapat melakukan tindakan berguna lainnya, seperti membaca baris tertentu dari file. Untuk melakukan ini, kami menggunakan penghitung dan mencetak baris yang sesuai ketika kami menemukannya saat mengulangi file:


filename = "test.txt"

line_number = 3
print (f"line {line_number} of {filename} is: ")

with open(filename, 'r') as filehandle:
current_line = 1
    for line in filehandle:
        if current_line == line_number:
            print(line)
            break
        current_line += 1

Ini seharusnya mudah dipahami, tetapi sedikit lebih panjang dari contoh sebelumnya. Itu dapat dipersingkat menggunakan cache baris modul.

Contoh berikut menunjukkan cara menyederhanakan kode menggunakan getline() metode. Jika nomor baris yang diminta berada di luar rentang baris yang valid dalam file, maka getline() metode mengembalikan string kosong sebagai gantinya:


import linecache

filename = "test.txt"

line_number = 3

line = linecache.getline(filename, line_number)
print (f"line {line_number} of {filename}:")
print (line)

Membaca Seluruh File Sekaligus

Last but not least kita akan melihat kasus yang sangat berbeda dari contoh sebelumnya โ€“ membaca seluruh file sekaligus.

Ingatlah bahwa dalam kebanyakan kasus Anda harus memiliki cukup memori untuk membaca seluruh file, karena karakter tidak memakan terlalu banyak ruang, tetapi bosan dengan file besar. Contoh berikut menggunakan kombinasi dari with pernyataan, dan read() metode. Dalam hal ini, kita akan menggunakan read() untuk memuat konten file sebagai aliran data:

Lihat panduan praktis dan praktis kami untuk mempelajari Git, dengan praktik terbaik, standar yang diterima industri, dan termasuk lembar contekan. Hentikan perintah Googling Git dan sebenarnya belajar itu!


filename = "test.txt"

with open(filename, 'r') as filehandle:
    filecontent = filehandle.read()
    print (filecontent)

Python juga menawarkan readlines() metode yang mirip dengan readline() metode dari contoh pertama. Berlawanan dengan read(), konten file disimpan dalam daftar, di mana setiap baris konten adalah item:


filename = "test.txt"

with open(filename, 'r') as filehandle:
    filecontent = filehandle.readlines()
    for line in filecontent:
        print (line)

Sementara readlines() akan membaca konten dari file hingga mencapai EOF, perlu diingat bahwa Anda juga dapat membatasi jumlah konten yang dibaca dengan memberikan sizehint parameter, yang merupakan jumlah byte untuk dibaca.

Kesimpulan

Seperti biasa, ada lebih dari satu cara untuk membaca isi file. Dari segi kecepatan, semuanya kurang lebih dalam kategori yang sama. Solusi mana yang paling cocok untuk Anda bergantung pada kasus penggunaan spesifik Anda. Kami pikir cukup membantu untuk melihat apa yang mungkin dan kemudian memilih solusi yang paling sesuai.

Meskipun Python sangat menyederhanakan proses membaca file, terkadang masih bisa menjadi rumit, dalam hal ini saya sarankan Anda melihat dokumentasi resmi Python untuk info lebih lanjut.

Stempel Waktu:

Lebih dari penyalahgunaan