Menulis generator untuk memuat data per bagian (2)
Pada latihan sebelumnya, Anda memproses berkas baris demi baris untuk sejumlah baris tertentu. Namun, bagaimana jika Anda ingin melakukannya untuk seluruh berkas?
Dalam kasus ini, akan berguna untuk menggunakan generator. Generator memungkinkan pengguna melakukan lazy evaluation terhadap data. Konsep lazy evaluation ini bermanfaat ketika Anda harus menangani himpunan data yang sangat besar karena memungkinkan Anda menghasilkan nilai secara efisien dengan yield hanya sebagian data pada satu waktu alih-alih seluruhnya sekaligus.
Dalam latihan ini, Anda akan mendefinisikan fungsi generator read_large_file() yang menghasilkan sebuah objek generator yang mengeluarkan satu baris dari berkas setiap kali next() dipanggil. Berkas csv 'world_dev_ind.csv' tersedia di direktori kerja Anda.
Perhatikan bahwa ketika Anda membuka koneksi ke sebuah berkas, objek berkas yang dihasilkan sebenarnya sudah merupakan generator! Jadi di praktik nyata, Anda tidak harus secara eksplisit membuat objek generator dalam kasus seperti ini. Namun, untuk tujuan pedagogis, Anda akan berlatih cara melakukannya di sini dengan fungsi read_large_file(). Silakan coba!
Latihan ini adalah bagian dari kursus
Kotak Perkakas Python
Petunjuk latihan
- Dalam fungsi
read_large_file(), baca satu baris darifile_objectdengan menggunakan metodereadline(). Simpan hasilnya kedata. - Dalam fungsi
read_large_file(),yieldbaris yang dibaca dari berkas, yaitudata. - Di dalam context manager, buat objek generator
gen_filedengan memanggil fungsi generator Andaread_large_file()dan meneruskanfileke dalamnya. - Cetak tiga baris pertama yang dihasilkan oleh objek generator
gen_filemenggunakannext().
Latihan interaktif praktis
Cobalah latihan ini dengan menyelesaikan kode contoh berikut.
# Define read_large_file()
def read_large_file(file_object):
"""A generator function to read a large file lazily."""
# Loop indefinitely until the end of the file
while True:
# Read a line from the file: data
data = ____
# Break if this is the end of the file
if not data:
break
# Yield the line of data
# Open a connection to the file
with open('world_dev_ind.csv') as file:
# Create a generator object for the file: gen_file
gen_file = ____
# Print the first three lines of the file
print(____)
print(____)
print(____)