Scrierea unui generator pentru încărcarea datelor pe fragmente (2)
În exercițiul anterior, ai procesat un fișier linie cu linie pentru un număr dat de linii. Dar ce faci dacă vrei să parcurgi întregul fișier?
În acest caz, generatoarele sunt foarte utile. Acestea permit evaluarea leneșă (lazy evaluation) a datelor. Conceptul de evaluare leneșă este util atunci când lucrezi cu seturi de date foarte mari, deoarece îți permite să generezi valori eficient prin yielding — adică producând doar câte un fragment de date la un moment dat, nu totul dintr-o dată.
În acest exercițiu, vei defini o funcție generator read_large_file() care produce un obiect generator ce returnează câte o singură linie dintr-un fișier la fiecare apel al next(). Fișierul CSV 'world_dev_ind.csv' se află în directorul tău curent.
Rețineți că atunci când deschizi o conexiune la un fișier, obiectul fișier rezultat este deja un generator! Prin urmare, în practică, nu va trebui să creezi explicit obiecte generator în astfel de situații. Totuși, din motive pedagogice, exersăm aici cum se face acest lucru cu funcția read_large_file(). Succes!
Acest exercițiu face parte din cursul
Cutia cu instrumente Python
Instrucțiuni pentru exercițiu
- În funcția
read_large_file(), citește o linie dinfile_objectfolosind metodareadline(). Atribuie rezultatul variabileidata. - În funcția
read_large_file(), returnează cuyieldlinia citită din fișier,data. - În managerul de context, creează un obiect generator
gen_fileapelând funcția ta generatorread_large_file()și transmițându-ifile. - Afișează primele trei linii produse de obiectul generator
gen_filefolosindnext().
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
# 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(____)