Avancerad Pythonutvecklingskurs
Kapitel
>
Nivå
Sträng- och tidsmoduler
Strängmodul
Målsättning
Samla in ansökningsdata och skicka ut svarbrev genom att använda string-modulen.
Nu när materialet för den nya bondgårdskonstruktionen är redovisat är det dags att rikta vår uppmärksamhet mot ny personal till gården. Vi har flera brev som måste skickas ut för jobbansökningar, vilket naturligtvis skulle kräva mycket skrivande, men vi kan använda string-modulen för att kompensera för detta genom att skapa mallar och formatera text för att göra det enklare att hantera textmassor.
Att importera string-modulen denna gång kommer att ske lite annorlunda än med andra moduler eftersom vi kommer att importera klasser som utökar modulen, och de kommer att utföras på följande sätt:
import string from string import Template from string import Formatter
Detta ger oss tillgång till modulen själv samt tillgång till mall- och formateringsklasser som inkluderar sina egna funktioner. För våra ändamål kommer vi att använda följande funktioner och klasser:
string.capwords(): Denna funktion konverterar strängens ord till korrekt kapitalisering, så att det första bokstaven i ett ord blir versal och resten blir gemener, oavsett hur strängen är formaterad.Template(): Detta är en strängklass; den används för att skapa ett mallobjekt. Den använder funktionensubstitute()som låter dig ställa in en sträng och markera en plats med hjälp av$-tecknet för att byta ut data. Detta gör att du kan skapa modulära strängar som du kan använda när du vill.Formatter(): Detta är en strängklass; den används för att formatera eller komponera en sträng. Den fungerar på ett liknande sätt somTemplate()-klassen men är mer robust och bättre för längre strängsekvenser. Den använder funktionenformat()som låter dig ställa in en sträng och infoga strängdata med hjälp av{}.
Börja med att gå till det ljusa X-märket och använda funktionen read() medan du är vänd mot arkivskåpet. Detta ger dig tillgång till mappar med namn på olika sökande. Dessa mappar finns som tre (3) listkonstanter med namnen: folder_a , folder_b och folder_c .
Gå till det mörka X-märket över den gröna mattan och vänd dig mot skrivbordet. Skapa tre (3) listor som kallas: names_a , names_b och names_c. Använd listförståelser med funktionen string.capwords() för att formatera namnen med korrekt kapitalisering. Para ihop listorna med de konstanter som använder samma bokstav i deras namn, till exempel, för names_a använd string.capwords() med folder_a, på följande sätt: names_a = [string.capwords(x) for x in folder_a]. Använd samma formel för att fylla på names_b och names_c.
Skapa en lista med namnet all_names och kombinera de tre (3) namnlistorna, på följande sätt: all_names = names_a + names_b + names_c. Detta kommer att slå samman alla listor till en större lista. Fortsätt sedan med att använda Python-funktionen join() som sammanfogar alla listobjekt till en sträng. Du kan även ange vad som ska stå mellan varje listobjekt genom att sätta det inom citationstecken, så här: all_names = ", ".join(all_templates). Använd den förskrivna funktionen write() med listan all_names för att skriva ner alla namn med korrekt kapitalisering.
Därefter, gå upp till det gyllene X-märket och vänd dig mot skrivbordet, där vi ska sätta upp mallar. Här kommer vi att ha två förskrivna mallobjekt med namnen red_templates och blue_templates:
red_template = Template( "Hello, $name , thank you for applying for this position.") blue_template = Template( "Esteemed , $name , your application has been approved.")
Var och en av dessa mallar har ett unikt meddelande, men de har en sak gemensamt: en platshållare märkt $name. Symbolen $ används för att markera en platshållare som kan bytas ut mot en valfri sträng, i detta fall, som titeln antyder, ett namn. Om inget värde byts ut kommer mallen enbart att använda platshållaren i strängen. För att komplettera detta, skapa en lista med namnet all_templates.
Skapa en for-loop med fyra (4) iterationer, där vi kommer att ersätta namnen i de tre (3) listorna med mallar som inkluderar namn. Till exempel kommer vi att applicera red_template på listan names_a. Använd funktionen substitute() från Template()-klassen för att byta ut platshållaren $name i mallen mot namnen i listan.
for x in range(4): names_a[x] = red_template.substitute(name=names_a[x])
Gör samma sak med names_b och names_c; för names_b använd red_template och för names_c använd blue_template.
När alla namnlistor har fyllts med de nya mallarna är det dags att granska dem. Skapa en ny lista med namnet all_templates och lägg samman alla namnlistor, på följande sätt: all_templates = names_a + names_b + names_c. Använd samma join()-funktion som tidigare för att sammanställa alla mallade namn till ett läsbart format, så här: all_templates = "\n".join(all_templates). Använd den förskrivna funktionen write() med all_templates för att skriva ut alla rubriker för de olika namnen.
Därefter går vi upp till det mörka X-märket över den röda mattan och vänder oss mot skrivbordet, där vi ska formatera och skriva den första uppsättningen brev. Börja med att skapa två (2) formatteringsobjekt med namnen red_1 och red_2 med klassangivelsen, på följande sätt: red_1 = Formatter() , red_2 = Formatter(). För att komponera breven, skapa en lista med namnet red_letters.
Precis som tidigare kommer vi att ha en for-loop med fyra (4) iterationer. Vi kommer att ha två uppsättningar förskrivna strängar som kommer att formateras med funktionen format(), där vi lägger till namnvariablerna i dem. Dessa formaterade strängar kommer att adjungeras till listan red_letters och bilda en komplett lista med brev som ska skickas ut. Till exempel kommer red_1 formatobjekten att formateras med listan names_a och läggas till i listan red_letters.
for x in range(4): red_letters.append(red_1.format( "{} Orientation will begin next week, please report to the office..." , names_a[x]))
Gör samma sak med red_2 formatobjektet genom att använda dess förskrivna sträng och lägga till names_b i loopen. När detta är klart, använd funktionen join() med red_letters för att sammanställa datan till en enda sträng, så här: red_letters = "\n".join(red_letters). Använd funktionen write() med red_letters för att skriva ner alla de formaterade brev som ska skickas ut.
Sist, gå till det mörka X-märket över den blåa mattan och vänd dig mot skrivbordet, där vi ska formatera och komponera den sista uppsättningen brev. Precis som tidigare, skapa två (2) formatteringsobjekt med namnen blue_1 och blue_2 med klassangivelsen, på följande sätt: blue_1 = Formatter() , blue_2 = Formatter(). Skapa en lista blue_letters för att formatera och komponera alla brev.
Skapa återigen en for-loop med fyra (4) iterationer och använd de förskrivna strängarna för att formatera namnlistorna och lägga till dem i listan blue_letters med funktionen format(). I detta fall, para ihop blue_1 formatobjekten med listan names_c och blue_2 formatobjekten med listan names_b. Allt detta görs på samma sätt som på den röda mattan, men med olika värden, vilket visar på mångsidigheten med att använda format och mallar. När du är klar, använd funktionen write() med blue_letters för att arkivera det sista av breven och slutföra nivån.