MulaiMulai sekarang secara gratis

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

Lihat Kursus

Petunjuk latihan

  • Dalam fungsi read_large_file(), baca satu baris dari file_object dengan menggunakan metode readline(). Simpan hasilnya ke data.
  • Dalam fungsi read_large_file(), yield baris yang dibaca dari berkas, yaitu data.
  • Di dalam context manager, buat objek generator gen_file dengan memanggil fungsi generator Anda read_large_file() dan meneruskan file ke dalamnya.
  • Cetak tiga baris pertama yang dihasilkan oleh objek generator gen_file menggunakan next().

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(____)
Edit dan Jalankan Kode