Python, svestran i snažan programski jezik, nudi mnoštvo funkcija i alata za pojednostavljivanje složenih zadataka. Jedna takva karakteristika su generatori, koji su posebna vrsta iterator koji vam omogućava da generišete redoslijed vrijednosti u letu, a ne da biste kreirali cijeli popis odjednom. Ovo može biti posebno korisno kod rada s velikim datotekama, jer vam omogućava da se postepeno obraduju podaci, spremanje memorije i poboljšanju performansi. Kao dobavljač generatora, vidio sam iz prve ruke koristi koje generatori mogu donijeti u operacije za čitanje. U ovom blogu vodit ću vas kroz proces korištenja generatora za čitanje datoteka u Pythonu, ističući njihove prednosti i pružanje praktičnih primjera.
Razumevanje generatora
Prije nego što zaronimo u čitanje datoteka, prvo razumijemo koji su generatori i kako rade. U Pythonu je generator funkcija koja koristiprinosključna riječ umjestopovratak. Kada se naziva funkcija generatora, vraća objekt generatora koji se može iserirati pomoću azapetlja ilisljedeći ()Funkcija. Svaki put kadaprinosKljučna riječ se susreće u funkciji generatora, stanje funkcije se sprema, a darovna vrijednost se vraća. Sledeći put kada se generator ponavlja, funkcija nastavlja pogubljenje odakle je stalo.
Evo jednostavnog primjera funkcije generatora:
Def Simple_Generator (): Prinos 1 Prinos 2 Prinos 3 Gen = Simple_Generator () za vrijednost u Gen: Ispis (vrijednost)
U ovom primjeru,Simple_GeneratorFunkcija je generator koji daje vrijednosti 1, 2 i 3. Kada kreiramo instancu generatora koristećiGen = jednostavan_generator (), možemo to prepoznati pomoćuzaLoop, koja ispisuje svaku vrijednost kao što se generira.
Prednosti upotrebe generatora za čitanje datoteka
Kada je u pitanju čitanje datoteka, generatori nude nekoliko prednosti zbog tradicionalnih metoda. Evo nekih od ključnih prednosti:
Efikasnost memorije
Jedna od glavnih prednosti korištenja generatora za čitanje datoteka je njihova efikasnost memorije. Kada pročitate veliku datoteku pomoću tradicionalne metode, poput čitanja cijele datoteke u listu, morate dodijeliti dovoljno memorije da biste odjednom pohranili cijelu datoteku u memoriji odjednom. To može biti problem ako je datoteka prevelika da bi se uklopila u memoriju, što dovodi do aMemoryError. Pomoću generatora možete pročitati liniju datoteke po liniji, obrada svake linije jer se čita, bez potrebe čuvati cijelu datoteku u memoriji.


Performans
Generatori takođe mogu poboljšati performanse operacija za čitanje datoteka. Budući da generatori generiraju vrijednosti u letu, mogu početi obrađivati podatke odmah, bez da čekaju da se čitava datoteka čita u memoriju. Ovo može biti posebno korisno kod rada sa velikim datotekama, jer vam omogućuje da započnete obradu podataka čim postane dostupan, umjesto da se čeka cjelokupna datoteka.
Lijena evaluacija
Generatori koriste lijenu evaluaciju, što znači da stvaraju samo vrijednosti kada su potrebne. Ovo može biti korisno kada samo trebate obraditi podskup podataka u datoteku, jer vam omogućuje preskočenje nepotrebnih podataka, a da ne morate čitati u memoriju.
Korištenje generatora za čitanje datoteka
Sada kad razumijemo prednosti korištenja generatora za čitanje datoteka, pogledajmo kako ih koristiti u praksi. Evo primjera korištenja generatora za čitanje linije datoteke po liniji:
Def Read_File_line_by_line (file_path): s otvorenim (file_path, 'r') kao datoteka: za liniju u datoteci: "velik_file.txt" gen = line_file_line_by_line (file_path) za liniju (line.strip ())
U ovom primjeru,pročitajte_file_line_by_lineFunkcija je generator koji čita linija datoteke po liniji. ThesaIzjava se koristi za otvaranje datoteke u režimu čitanja izapetlja iterate na svaku liniju u datoteci. Svaki se linija potom popušta pomoćuprinosKljučna riječ, koja omogućava funkciju da nastavi izvršenje odakle je ostalo sljedeće vrijeme, ona se ponavlja.
Kada kreiramo instancu generatora koristećiGen = proad_file_line_by_line (file_path), možemo to prepoznati pomoćuzaPetlja, koja ispisuje svaku retku kako se generira. TheStrip ()Metoda se koristi za uklanjanje vodećeg ili zadnjeg razmaka iz svakog retka.
Obrada velikih datoteka sa generatorima
Pri radu sa velikim datotekama često je potrebno obraditi podatke u komadima, a ne linijom po liniji. To se može učiniti pomoću generatora koji čita određeni broj linija odjednom. Evo primjera korištenja generatora za čitanje datoteke u komadima:
Def Read_File_in_chunks (file_path, Chunk_Size = 100): sa otvorenim (file_path, 'r') kao datoteka: Chunk.Append (CUNK) == Chunk_size: [] ako CUNK: prinos cvrkutajnosti: 'velik_file.txt' gen = ' pročitajte_file_in_chunks (file_path) za komad u Gen: # Proces komada linija za liniju u komadu: print (linija.strip ())
U ovom primjeru,pročitajte_file_in_chunksFunkcija je generator koji čita datoteku u komadima određene veličine. TheChunk_sizeParametar određuje broj linija za čitanje u svakom komadu. Thezapetlja iterate na svaku liniju u datoteci, dodajući svaki redak ukomadLista. Kadakomadlista dostiže navedenu veličinu, daje se korištenjemprinosKljučna riječ ikomadLista se resetira.
Kada kreiramo instancu generatora koristećiGen = proad_file_in_cunks (file_path), možemo to prepoznati pomoćuzapetlja, koja procesuira svaki komad linije kao što se generira.
Zaključak
Zaključno, generatori su moćan i fleksibilan alat za čitanje datoteka u Pythonu. Nude nekoliko prednosti u odnosu na tradicionalne metode, uključujući efikasnost memorije, performanse i lijenu evaluaciju. Korištenjem generatora možete inkretno obraditi velike datoteke, a da ne morate čuvati cijelu datoteku u memoriji. Kao dobavljač generatora, ohrabrujem vas da istražite prednosti korištenja generatora u svojim Python projektima, posebno pri radu sa velikim datotekama.
Ako ste zainteresirani za učenje više o generatorima ili imate bilo kakvih pitanja o našim proizvodima, molimo ne ustručavajte seKontaktirajte nasza raspravu o nabavci. Ovdje smo da vam pomognemo da pronađete prava rješenja za vaše potrebe.
Reference
- Python dokumentacija: https://docs.python.org/3/tutorial/classes.html#generators
- Pravi python: https://realpython.com/introduction-t-python-generators/
- Poljoprivreda za prskanje poljoprivrede: /agricultural-machinery/drone/spraying-drones-agriculture.html




