Python, všestranný a výkonný programovací jazyk, ponúka množstvo funkcií a nástrojov na zjednodušenie zložitých úloh. Jednou z takýchto funkcií sú generátory, ktoré sú špeciálnym typom iterátora, ktorý vám umožňuje vygenerovať sekvenciu hodnôt na fly, namiesto vytvorenia celého zoznamu naraz. To môže byť užitočné obzvlášť pri práci s veľkými súbormi, pretože vám umožňuje postupne spracovávať údaje, ukladanie pamäte a zlepšenie výkonu. Ako dodávateľ generátora som videl z prvej ruky výhody, ktoré môžu generátory priniesť do operácií čítania súborov. V tomto blogovom príspevku vás prevediem procesom používania generátorov na čítanie súborov v Pythone, zdôrazním ich výhody a poskytneme praktické príklady.
Pochopenie generátorov
Predtým, ako sa ponoríme do čítania súborov, najskôr pochopme, čo sú generátory a ako fungujú. V Pythone je generátor funkcia, ktorá používavýnoskľúčové slovo namiestonávrat. Keď sa volá funkcia generátora, vráti objekt generátora, ktorý sa dá opísať pomocou apreslučka aleboNext ()funkcia. ZakaždýmvýnosKľúčové slovo sa vyskytuje vo funkcii generátora, stav funkcie je uložený a vrátená hodnota sa vráti. Keď bude generátor opakovaný, funkcia obnoví vykonávanie od miesta, kde skončila.
Tu je jednoduchý príklad funkcie generátora:
DEF Simple_Generator (): Výťažok 1 Výťažok 2 Výťažok 3 Gen = Simple_Generator () pre hodnotu v Gen: tlač (hodnota)
V tomto príkladejednoduchýFunkcia je generátor, ktorý poskytuje hodnoty 1, 2 a 3. Keď vytvoríme inštanciu generátora pomocougen = jednoduchý_generator (), môžeme nad tým iterovať pomocou apreslučka, ktorá vytlačí každú hodnotu, keď sa vygeneruje.
Výhody používania generátorov na čítanie súborov
Pokiaľ ide o čítanie súborov, generátory ponúkajú oproti tradičným metódam niekoľko výhod. Tu sú niektoré z kľúčových výhod:
Účinnosť
Jednou z hlavných výhod používania generátorov na čítanie súborov je ich účinnosť pamäte. Keď čítate veľký súbor pomocou tradičnej metódy, napríklad čítanie celého súboru do zoznamu, musíte prideliť dostatok pamäte na uloženie celého súboru naraz do pamäte. To môže byť problém, ak je súbor príliš veľký na to, aby sa zmestil do pamäte, čo vedie k aMemoryError. S generátormi si môžete prečítať riadok súboru po riadku a spracovať každý riadok pri čítaní, bez toho, aby ste museli ukladať celý súbor do pamäte.


Výkonnosť
Generátory môžu tiež zlepšiť výkon operácií čítania súborov. Pretože generátory generujú hodnoty za fly, môžu okamžite začať spracovať údaje bez toho, aby museli čakať na čítanie celého súboru do pamäte. To môže byť užitočné obzvlášť pri práci s veľkými súbormi, pretože vám umožňuje spustiť spracovanie údajov hneď, ako budú k dispozícii, namiesto čakania na načítanie celého súboru.
Lenivé hodnotenie
Generátori používajú lenivé hodnotenie, čo znamená, že hodnoty generujú iba vtedy, keď sú potrebné. To môže byť užitočné, keď potrebujete iba spracovať podmnožinu údajov v súbore, pretože vám umožňuje preskočiť zbytočné údaje bez toho, aby ste ich museli čítať do pamäte.
Používanie generátorov na čítanie súborov
Teraz, keď chápeme výhody používania generátorov na čítanie súborov, pozrime sa, ako ich používať v praxi. Tu je príklad použitia generátora na čítanie riadku súboru podľa riadku:
def read_file_line_by_line (file_path): s Open (File_path, 'r') ako súbor: pre riadok v súbore: výťažok riadku file_path = 'lowe_file.txt' gen = read_file_line_by_line (File_path) pre riadok v gen: tlač (line.Strip ())
V tomto príkladeread_file_line_by_lineFunkcia je generátor, ktorý číta riadok súboru po riadku. TensPríkaz sa používa na otvorenie súboru v režime čítania apreSlučka iteruje cez každý riadok v súbore. Každý riadok sa potom poskytuje pomocouvýnosKľúčové slovo, ktoré umožňuje funkcii pokračovať v vykonávaní, odkiaľ skončila, keď nabudúce iteruje.
Keď vytvoríme inštanciu generátora používaniegen = read_file_line_by_line (file_path), môžeme nad tým iterovať pomocou apreslučka, ktorá tlačí každý riadok, keď je generovaný. TenStrip ()Metóda sa používa na odstránenie akéhokoľvek vedúceho alebo koncového medzery z každého riadku.
Spracovanie veľkých súborov s generátormi
Pri práci s veľkými súbormi je často potrebné spracovať údaje skôr v kúskoch ako v riadku podľa riadku. To sa dá urobiť pomocou generátora, ktorý číta naraz zadaný počet riadkov. Tu je príklad použitia generátora na čítanie súboru v kúskoch:
def read_file_in_chunks (file_path, chunk_size = 100): s otvoreným (file_path, 'r') ako súbor: chunk = [] pre riadok v súbore: chunk.append (riadok), ak len (chunk) == chunk_size_Ize: výťažok chunk = [] if chunk: výťažok kus file_path = 'loge_file. Kuun v Gen: # Spracujte kúsok riadkov pre riadok v kuse: tlač (line.Strip ())
V tomto príkladeread_file_in_chunksFunkcia je generátor, ktorý číta súbor v kúskoch zadanej veľkosti. TenchrupParameter určuje počet riadkov na čítanie v každom kuse. TenpreSlučka iteruje cez každý riadok v súbore a pridá každý riadok dokuszoznam. KedykusZoznam dosahuje zadanú veľkosť, poskytuje sa pomocouvýnoskľúčové slovokusZoznam je resetovaný.
Keď vytvoríme inštanciu generátora používaniegen = read_file_in_chunks (file_path), môžeme nad tým iterovať pomocou apreslučka, ktorá spracováva každý kus čiary, keď sa generuje.
Záver
Záverom je, že generátory sú výkonným a flexibilným nástrojom na čítanie súborov v Pythone. Ponúkajú niekoľko výhod oproti tradičným metódam vrátane efektívnosti pamäte, výkonu a lenivého hodnotenia. Používaním generátorov môžete postupne spracovať veľké súbory bez toho, aby ste museli ukladať celý súbor do pamäte. Ako dodávateľ generátora vás odporúčam, aby ste preskúmali výhody používania generátorov vo vašich projektoch Python, najmä pri práci s veľkými súbormi.
Ak máte záujem dozvedieť sa viac o generátoroch alebo máte nejaké otázky týkajúce sa našich produktov, neváhajteKontaktujte násna diskusiu o obstarávaní. Sme tu, aby sme vám pomohli nájsť správne riešenia pre vaše potreby.
Odkazy
- Dokumentácia Python: https://docs.python.org/3/tutorial/classes.html#generatory
- Real Python: https://realpython.com/introduction-to-python-generators/
- Poľnohospodárstvo s postrekovaním: /Agricultural-machinery/drone/spraying-drones-griculture.html




