Python, wszechstronny i potężny język programowania, oferuje mnóstwo funkcji i narzędzi do uproszczenia złożonych zadań. Jedną z takich funkcji są generatory, które są specjalnym typem iteratora, który pozwala generować sekwencję wartości w locie, zamiast tworzyć całą listę jednocześnie. Może to być szczególnie przydatne podczas pracy z dużymi plikami, ponieważ umożliwia szybkie przetwarzanie danych, zapisywanie pamięci i poprawę wydajności. Jako dostawca generatora widziałem z pierwszej ręki korzyści, które generatory mogą wnieść do operacji czytania plików. W tym poście na blogu poprowadzę proces używania generatorów do czytania plików w Python, podkreślając ich zalety i dostarczając praktyczne przykłady.
Zrozumienie generatorów
Zanim zagłębimy się w czytanie plików, najpierw zrozummy, czym są generatory i jak działają. W Pythonie generator jest funkcją, która używadawaćSłowo kluczowe zamiastpowrót. Po wywołaniu funkcji generatora zwraca obiekt generatora, który może zostać iterowany za pomocąDopętla lubNastępny()funkcjonować. Za każdym razemdawaćSłowo kluczowe jest napotykane w funkcji generatora, stan funkcji jest zapisywany, a wartość uzyskana jest zwracana. Następnym razem, gdy generator zostanie iterowany, funkcja wznawia wykonanie z miejsca, w którym się skończyła.
Oto prosty przykład funkcji generatora:
def simple_generator (): wydajność 1 wydajność 2 plon 3 gen = simple_generator () dla wartości w gen: druk (wartość)
W tym przykładzieSimple_GeneratorFunkcja jest generatorem, który daje wartości 1, 2 i 3. Kiedy tworzymy instancję generatora za pomocągen = simple_generator (), możemy nad nim iterować za pomocąDopętla, która drukuje każdą wartość podczas jej generowania.
Zalety korzystania z generatorów do odczytu plików
Jeśli chodzi o czytanie plików, generatory oferują kilka zalet w zakresie tradycyjnych metod. Oto niektóre z kluczowych korzyści:
Wydajność pamięci
Jedną z głównych zalet korzystania z generatorów do odczytu plików jest ich wydajność pamięci. Podczas czytania dużego pliku przy użyciu tradycyjnej metody, takiej jak odczyt całego pliku na liście, musisz przydzielić wystarczającą pamięć, aby przechowywać cały plik w pamięci jednocześnie. Może to stanowić problem, jeśli plik jest zbyt duży, aby zmieścić się w pamięci, co prowadzi doMemoryError. Dzięki generatorom możesz odczytać wiersz pliku po linii, przetwarzając każdą linię podczas odczytania, bez konieczności przechowywania całego pliku w pamięci.


Wydajność
Generatory mogą również poprawić wydajność operacji czytania plików. Ponieważ generatory generują wartości w locie, mogą natychmiast rozpocząć przetwarzanie danych, bez konieczności czekania na odczyt całego pliku w pamięci. Może to być szczególnie przydatne podczas pracy z dużymi plikami, ponieważ pozwala na rozpoczęcie przetwarzania danych, gdy tylko się dostępne, zamiast czekać na załadowanie całego pliku.
Leniwa ocena
Generatory używają leniwej oceny, co oznacza, że generują wartości tylko wtedy, gdy są potrzebne. Może to być przydatne, gdy trzeba tylko przetworzyć podzbiór danych w pliku, ponieważ pozwala pominąć niepotrzebne dane bez konieczności odczytania ich do pamięci.
Korzystanie z generatorów do odczytu plików
Teraz, gdy rozumiemy zalety korzystania z generatorów do odczytania plików, spójrzmy, jak je używać w praktyce. Oto przykład użycia generatora do odczytania wiersza pliku po linii:
def read_file_line_by_line (file_path): with open (plik_path, „r”) jako plik: dla linii w pliku: PLOT LINE FILE_PATH = 'LARG_FILE.TXT' gen = Read_file_Line_by_line (file_path) dla linii w gen: print (line.Strip ())
W tym przykładzieRead_file_line_by_lineFunkcja jest generatorem, który odczytuje wiersz plików po wierszu. .zinstrukcja służy do otwarcia pliku w trybie odczytu iDoPętla iteruje każdą linię w pliku. Każda linia jest następnie wydzielana za pomocądawaćSłowo kluczowe, które pozwala funkcji wznowić wykonywanie z miejsca, w którym zakończyła się następnym razem.
Kiedy tworzymy instancję generatora za pomocągen = read_file_line_by_line (file_path), możemy nad nim iterować za pomocąDopętla, która drukuje każdą linię podczas jej generowania. .pas()Metoda służy do usuwania dowolnej wiodącej lub spustowej białej liniowej z każdej linii.
Przetwarzanie dużych plików z generatorami
Podczas pracy z dużymi plikami często konieczne jest przetwarzanie danych w fragmentach, a nie na linii. Można to zrobić za pomocą generatora, który odczytuje określoną liczbę linii jednocześnie. Oto przykład używania generatora do odczytania pliku w fragmentach:
def read_file_in_chunks (file_path, chunk_size = 100): z open (plik_path, „r”) jako plik: chunk = [] dla linii w pliku: chunk.append (linia) if len (chunk) == chunk_size: PEDRES CHUNK CHUNK = [] if Chunk: STOTED CHUNK PITLE_PATH = 'LIST_FILE.TXT' GENAL = Read_file_in_chunks (File_Path) dla porodu w gen: # przetwarzaj porcję linii dla linii w fragment: print (line.strip ())
W tym przykładzieRead_file_in_chunksFunkcja to generator, który odczytuje plik w kawałkach określonego rozmiaru. .Chunk_SizeParametr określa liczbę linii do odczytania w każdym kawałku. .Dopętla iteruje każdą linię w pliku, dodając każdą linię dokawałeklista. Kiedykawałeklista osiąga określony rozmiar, jest ona wyznaczona za pomocądawaćSłowo kluczowe ikawałekLista jest resetowana.
Kiedy tworzymy instancję generatora za pomocągen = read_file_in_chunks (file_path), możemy nad nim iterować za pomocąDoPętla, która przetwarza każdy kawałek linii podczas ich generowania.
Wniosek
Podsumowując, generatory są potężnym i elastycznym narzędziem do czytania plików w Python. Oferują kilka zalet w zakresie tradycyjnych metod, w tym wydajność pamięci, wydajność i leniwą ocenę. Korzystając z generatorów, możesz stopniowo przetwarzać duże pliki bez konieczności przechowywania całego pliku w pamięci. Jako dostawca generatora zachęcam do zbadania korzyści wykorzystywania generatorów w projektach Python, szczególnie podczas pracy z dużymi plikami.
Jeśli chcesz dowiedzieć się więcej o generatorach lub masz pytania dotyczące naszych produktów, nie wahaj sięSkontaktuj się z namido dyskusji na zamówienia. Jesteśmy tutaj, aby pomóc Ci znaleźć odpowiednie rozwiązania dla Twoich potrzeb.
Odniesienia
- Dokumentacja Pythona: https://docs.python.org/3/tutorial/classes.html#generators
- Real Python: https://realphon.com/introduction-to-pithon-generators/
- Drony natryskiwane Rolnictwo:/aagricultural-machinery/drone/spraying-drones-igriculture.html




