Zacznij terazZacznij za darmo

Tworzenie generatora do wczytywania danych we fragmentach (2)

W poprzednim ćwiczeniu przetwarzałeś(-aś) plik linia po linii przez określoną liczbę linii. Co jednak zrobić, gdy chcesz przetworzyć cały plik?

W takim przypadku przydają się generatory. Generatory umożliwiają leniwe przetwarzanie danych. Koncepcja leniwego przetwarzania jest szczególnie użyteczna przy bardzo dużych zbiorach danych – pozwala generować wartości efektywnie, zwracając (yielding) tylko fragmenty danych naraz, zamiast wczytywać wszystko od razu.

W tym ćwiczeniu zdefiniujesz funkcję generatora read_large_file(), która tworzy obiekt generatora zwracający pojedynczą linię z pliku przy każdym wywołaniu next(). Plik CSV 'world_dev_ind.csv' znajduje się w twoim bieżącym katalogu.

Zwróć uwagę, że po otwarciu połączenia z plikiem, wynikowy obiekt plikowy jest już generatorem! W praktyce nie trzeba więc jawnie tworzyć obiektów generatora w takich sytuacjach. Jednak w celach edukacyjnych ćwiczymy tutaj, jak to zrobić, korzystając z funkcji read_large_file(). Do dzieła!

To ćwiczenie jest częścią kursu

Zestaw narzędzi Pythona

Zobacz kurs

Instrukcje do ćwiczenia

  • W funkcji read_large_file() wczytaj linię z file_object za pomocą metody readline(). Przypisz wynik do data.
  • W funkcji read_large_file() zwróć wczytaną linię data za pomocą yield.
  • W menedżerze kontekstu utwórz obiekt generatora gen_file, wywołując swoją funkcję generatora read_large_file() i przekazując do niej file.
  • Wydrukuj pierwsze trzy linie zwrócone przez obiekt generatora gen_file, używając next().

Interaktywne ćwiczenie praktyczne

Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.

# 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(____)
Edytuj i uruchom kod