Fejlett Python fejlesztési tanfolyam
Fejezet
>
Szint
Karakterlánc és Idő Modulok
String modul
Cél
Alkalmazásadatok összegyűjtése és válaszüzenetek kiküldése a string modul használatával.
Most, hogy az új farm építéséhez szükséges anyagok rendelkezésre állnak, ideje az új személyzet beszerzésére összpontosítani. Több levelet kell kiküldeni az álláspályázatokhoz, ami természetesen rengeteg írást igényel, azonban a string modul felhasználásával létrehozhatunk sablonokat és formázhatjuk a szöveget, hogy könnyebben kezelhetővé váljanak a szövegtömbök.
A string modul importálása ezúttal kicsit másképp történik, mint más modulok esetében, mivel olyan osztályokat importálunk, amelyek kiterjesztik a modult, és az alábbi módon kerülnek végrehajtásra:
import string from string import Template from string import Formatter
Ez hozzáférést biztosít magához a modulhoz, valamint a sablon- és formázóosztályokhoz, amelyek saját függvényekkel rendelkeznek. Számunkra az alábbi függvényeket és osztályokat fogjuk használni:
string.capwords(): Ez a függvény a szavakat úgy alakítja át, hogy megfelelő nagybetűs formázást alkalmazzon, azaz a szó első betűje nagybetűs, a többi pedig kisbetűs, függetlenül attól, hogy a string eredetileg hogyan lett formázva.Template(): Ez egy string osztály, amelyet sablon objektum létrehozására használnak. Asubstitute()függvény segítségével hozhatjuk létre, amely lehetővé teszi, hogy a szövegben a$jellel jelölt helyőrzőt később lecseréljük egy általad választott karakterláncra. Ez lehetővé teszi moduláris stringek létrehozását, amelyeket szabadon használhatsz.Formatter(): Ez egy string osztály, amelyet a szöveg formázására vagy összeállítására használnak. Hasonló módon működik, mint aTemplate()osztály, de robusztusabb és nagyobb szövegsorozatok esetén hatékonyabb. Aformat()függvényt használja, amely lehetővé teszi, hogy{}segítségével illesszünk be adatokat a szövegbe.
Kezdd azzal, hogy elmégy a világos X jelhez, és a read() függvény használatával, miközben az iratrendező szekrény felé nézel, így hozzáférsz a különféle pályázók neveit tartalmazó mappákhoz. Ezek a mappák három (3) listakonstanszként szerepelnek: folder_a, folder_b és folder_c.
Menj el a sötét X jelhez, a zöld szőnyegen át, és fordulj az asztal felé. Hozz létre három (3) listát names_a, names_b és names_c néven. Használj listakomprehensziót a string.capwords() függvénnyel, hogy a nevek helyes nagybetűs formázását érvényesítsd. Párosítsd a listákat az azonos betűkkel rendelkező konstansokkal; például a names_a esetében használd a string.capwords() függvényt a folder_a-hoz, így: names_a = [string.capwords(x) for x in folder_a]. Ugyanezt a formulát alkalmazd a names_b és names_c kitöltésére.
Hozz létre egy all_names nevű listát, és egyesítsd a három (3) névlistát, így: all_names = names_a + names_b + names_c. Ez az összes listát egy nagyobb listába fűzi, majd használd a Python join() függvényét, amely összekapcsolja a listaelemeket egy sztringgé. Megadhatod azt is, hogy mi kerüljön az egyes elemek közé idézőjelek között, például így: all_names = ", ".join(all_templates). Használd az előre definiált write() függvényt az all_names listával, hogy lejegyezd a neveket a helyes nagybetűs formázással.
Ezután menj az arany X jelhez, és fordulj az asztal felé; itt állítjuk be a sablonokat. Két előre definiált sablon objektumot találunk: red_templates és blue_templates:
red_template = Template( "Hello, $name , thank you for applying for this position.") blue_template = Template( "Esteemed , $name , your application has been approved.")
Mindegyik sablonnak egyedi üzenete van, ugyanakkor közös bennük egy $name jelzéssel ellátott helyőrző. A $ szimbólumot arra használjuk, hogy kiemeljünk egy helyőrzőt, amelyet később lecserélhetünk egy általad választott stringre, ebben az esetben, ahogy a cím is sugallja, egy névre. Ha nem cserélsz ki értéket, a sablon egyszerűen a helyőrzőt használja a szövegben. Ennek kiegészítéseként hozz létre egy all_templates nevű listát.
Hozz létre egy for ciklust négy (4) ismétléssel, amellyel a három (3) névlistában lévő neveket a sablonosított formába cseréljük. Például a red_template sablont alkalmazzuk a names_a listára. Használd a substitute() függvényt a Template() osztályban, hogy lecseréld a sablonban található $name helyőrzőt a lista megfelelő nevére.
for x in range(4): names_a[x] = red_template.substitute(name=names_a[x])
Ugyanezt tedd meg a names_b és names_c esetében: a names_b esetében szintén a red_template-et használd, míg a names_c esetében a blue_template-et.
Miután az összes névlista bekerült az új sablonokkal, ideje áttekinteni őket. Hozz létre egy új all_templates nevű listát, és egyesítsd benne az összes névlistát így: all_templates = names_a + names_b + names_c. Használd ugyanazt a join() függvényt, mint korábban, hogy az összes sablonosított nevet olvasható formába fűzd össze, például így: all_templates = "\n".join(all_templates). Használd az előre definiált write() függvényt az all_templates használatával, hogy leírd az összes különböző névhez tartozó fejléceket.
Ezután menj el a sötét X jelhez, a piros szőnyegen át, és fordulj az asztal felé; itt az első levélsorozat formázásával és megírásával foglalkozunk. Kezdj két (2) formatter objektum létrehozásával red_1 és red_2 néven az osztály megjelölésével, például így: red_1 = Formatter(), red_2 = Formatter(). A levelek összeállításához hozz létre egy red_letters nevű listát.
Ahogy korábban, itt is egy for ciklust fogunk használni négy (4) ismétléssel, ahol két előre definiált sztringet formázunk a format() függvény segítségével, és a neveket építjük be. Ezek a formázott szövegek a red_letters listához kerülnek hozzáfűzésre, így egy átfogó levéllistát alkotva, amelyet kiküldünk. Például a red_1 formatter objektumot a names_a listával formázzuk, majd hozzáadjuk a red_letters listához.
for x in range(4): red_letters.append(red_1.format( "{} Orientation will begin next week, please report to the office..." , names_a[x]))
Ugyanezt tedd meg a red_2 formatter objektummal, annak előre definiált sztringjét használva, és add hozzá a names_b listát a ciklushoz. Miután mindez beállításra került, használd a join() függvényt a red_letters esetében, hogy az adatokat egyetlen fájlba fűzd össze, például így: red_letters = "\n".join(red_letters). Használd a write() függvényt a red_letters használatával, hogy lejegyezd az összes formázott, kiküldendő levelet.
Végül menj el a sötét X jelhez, a kék szőnyegen át, és fordulj az asztal felé; itt az utolsó levélsorozat formázásával és összeállításával foglalkozunk. Ahogy korábban, hozz létre két (2) formatter objektumot blue_1 és blue_2 néven az osztály megjelölésével, például így: blue_1 = Formatter(), blue_2 = Formatter(). Hozz létre egy blue_letters nevű listát a levelek formázásához és összeállításához.
Ismét hozz létre egy for ciklust négy (4) ismétléssel, és használd az előre definiált szövegeket a névlisták formázására, majd add hozzá őket a blue_letters listához a format() függvény segítségével. Ebben az esetben a blue_1 formatter objektumokat párosítsd a names_c listával, míg a blue_2 formatter objektumokat a names_b listával használd. Mindez ugyanúgy történik, mint a piros szőnyeges esetben, csak más értékekkel, bemutatva a formátumok és sablonok sokoldalúságát. Miután elkészültél, használd a write() függvényt a blue_letters listával, hogy az utolsó leveleket is rögzítsd, és ezzel befejezd a szintet.