Veriyi parçalara yüklemek için bir üreteç yazma (2)
Önceki egzersizde, belirli sayıda satır için bir dosyayı satır satır işlemiştin. Peki, bunu tüm dosya için yapmak istersen ne olur?
Bu durumda üreteçler (generators) kullanmak faydalı olur. Üreteçler, veriyi tembel değerlendirme ile işlemeni sağlar. Tembel değerlendirme kavramı, çok büyük veri kümeleriyle uğraşırken kullanışlıdır çünkü verileri tek seferde tamamını almak yerine her seferinde yalnızca birer parça yield ederek verimli bir şekilde üretmeni sağlar.
Bu egzersizde, her next() çağrıldığında bir dosyadan tek bir satır döndüren bir üreteç nesnesi üreten read_large_file() adlı bir üreteç fonksiyonu tanımlayacaksın. 'world_dev_ind.csv' adlı csv dosyası kullanımın için mevcut çalışma dizininde.
Bir dosyaya bağlantı açtığında, ortaya çıkan dosya nesnesinin zaten bir üreteç olduğunu unutma! Yani gerçek dünyada, bu gibi durumlarda açıkça üreteç nesneleri oluşturman gerekmeyecek. Ancak pedagojik nedenlerle, burada read_large_file() fonksiyonuyla bunu nasıl yapacağını pratik etmeni istiyoruz. Hadi başla!
Bu egzersiz
Python Araç Kutusu
kursunun bir parçasıdırEgzersiz talimatları
read_large_file()fonksiyonunda,readline()metodunu kullanarakfile_objectten bir satır oku. Sonucudatadeğişkenine ata.read_large_file()fonksiyonunda, dosyadan okunan satırıdataolarakyieldet.- Bağlam yöneticisi içinde, üreteç fonksiyonun
read_large_file()'ı çağırıp onafilegeçirerekgen_fileadlı bir üreteç nesnesi oluştur. next()kullanarak üreteç nesnesigen_fileın ürettiği ilk üç satırı yazdır.
Uygulamalı interaktif egzersiz
Bu örnek kodu tamamlayarak bu egzersizi bitirin.
# 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(____)