Avanceret Python Udviklingskursus
Kapitel
>
Niveau
Streng- og Tidsmoduler
Streng Modul
Mål
Saml ansøgningsdata og send svarbreve ved at bruge string-modulet.
Nu hvor materialet til den nye gårdkonstruktion er blevet taget højde for, er det tid til at rette vores opmærksomhed mod nyt personale til gården. Vi har adskillige breve, der skal sendes ud for jobansøgninger; naturligvis ville det kræve meget skrivning, men vi kan bruge string-modulet til at opveje dette, så vi kan oprette skabeloner og formatere tekst for at gøre det lettere at håndtere tekstmasser.
Import af string-modulet denne gang vil forløbe lidt anderledes end med andre moduler, da vi vil importere klasser, der udvider modulet, og som vil blive eksekveret på følgende måde:
import string from string import Template from string import Formatter
Dette giver os adgang til selve modulet samt adgang til skabelon- og formateringsklasser, der indeholder deres egne funktioner. Til vores formål vil vi bruge følgende funktioner og klasser:
string.capwords(): Denne funktion konverterer strengens ord til korrekt kapitalisering, så det første bogstav i et ord bliver stort, og resten småt uanset hvordan strengen er formateret.Template(): Dette er en strengklasse, der bruges til at oprette et skabelonobjekt. Den bruger funktionensubstitute(), som giver dig mulighed for at opstille en streng og markere et sted med$tegnet til at udskifte data. Dette giver dig mulighed for at oprette modulære strenge, som du kan bruge efter behov.Formatter(): Dette er en strengklasse, der bruges til at formatere eller sammensætte en streng. Den fungerer på en måde, der lignerTemplate()-klassen, men er mere robust og bedre til større strengsekvenser. Den bruger funktionenformat(), som giver dig mulighed for at opstille en streng og indsætte data ved hjælp af{}.
Start med at gå hen til det lyse X-mærke og brug funktionen read() mens du vender mod arkivskabet, dette vil give dig adgang til mapper med navnet på forskellige ansøgere. Disse mapper findes som tre (3) listekonstanter med navnene: folder_a, folder_b og folder_c.
Gå hen til det mørke X-mærke over det grønne tæppe og vend mod skrivebordet. Opret tre (3) lister kaldet: names_a, names_b og names_c. Brug listeforståelser med funktionen string.capwords() for at formatere navnene med korrekt kapitalisering. Par listerne med de konstanter, der bruger de samme bogstaver i deres navn, for eksempel for names_a brug string.capwords() med folder_a, sådan her: names_a = [string.capwords(x) for x in folder_a]. Brug samme metode til at udfylde names_b og names_c.
Opret en liste med navnet all_names og læg de tre (3) navnelister sammen, sådan her: all_names = names_a + names_b + names_c. Dette vil kombinere alle listerne til én større liste. Fortsæt herefter med at bruge Python-funktionen join(), som vil samle alle listeelementerne til en streng. Du kan også angive, hvad der skal indsættes mellem hvert listeelement ved at deklarere det i anførselstegn, sådan her: all_names = ", ".join(all_templates). Brug den forudskrevne funktion write() med listen all_names for at nedfælde alle navnene med korrekt kapitalisering.
Dernæst, gå hen til det gyldne X-mærke og vend mod skrivebordet, her vil vi opsætte skabeloner. Her vil vi have to forudskrevne skabelonobjekter med navnene red_templates og blue_templates:
red_template = Template( "Hello, $name , thank you for applying for this position.") blue_template = Template( "Esteemed , $name , your application has been approved.")
Hver af disse skabeloner har en unik besked, men de har alligevel én ting til fælles, nemlig en pladsholder mærket $name. $ symbolet bruges til at angive en pladsholder, som kan udskiftes med en valgfri streng; i dette tilfælde, som titlen antyder, er det et navn. For at supplere dette, opret en liste med navnet all_templates.
Opret en for-løkke med fire (4) cyklusser; med denne vil vi erstatte navnene i de tre (3) navnelister med skabeloner, der inkluderer navnene. For eksempel vil vi anvende red_template på listen names_a. Brug funktionen substitute() for Template()-klassen til at udskifte pladsholderen $name i skabelonen med navnene fra listen.
for x in range(4): names_a[x] = red_template.substitute(name=names_a[x])
Gør det samme med names_b og names_c; for names_b brug også red_template, og for names_c brug blue_template.
Når alle navnelister er blevet opdateret med de nye skabeloner, er det tid til at gennemgå dem. Opret en ny liste med navnet all_templates og læg alle navnelisterne sammen, sådan her: all_templates = names_a + names_b + names_c. Brug samme join() funktion som før for at samle alle de skabelonbaserede navne i en læsevenlig form, sådan her: all_templates = "\n".join(all_templates). Brug den forudskrevne write() funktion med all_templates for at fremvise alle overskrifterne for de forskellige navne.
Dernæst går vi hen til det mørke X-mærke over det røde tæppe og vender mod skrivebordet, hvor vi vil formatere og skrive det første sæt breve. Start med at oprette to (2) formatter objekter med navnene red_1 og red_2 med klassens notation, sådan her: red_1 = Formatter(), red_2 = Formatter(). Til sammensætningen af brevene, opret en liste med navnet red_letters.
Ligesom før vil vi have en for-løkke med fire (4) cyklusser, hvor vi vil have to sæt forudskrevne strenge, som vil blive formateret med format()-funktionen og tilføjet med navnvariablerne. Disse formaterede strenge vil blive tilføjet til listen red_letters, hvilket danner en omfattende liste af breve, der skal sendes ud. For eksempel vil red_1 formatteringsobjekterne blive formateret med listen names_a og tilføjet til 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 det samme med red_2 formatteringsobjektet ved at bruge dets forudskrevne streng og tilføj names_b til løkken. Når alt er sat op, brug funktionen join() med red_letters for at samle dataene til en enkelt fil, sådan her: red_letters = "\n".join(red_letters). Brug funktionen write() med red_letters for at nedfælde alle de formaterede breve, der sendes ud.
Til sidst, gå hen til det mørke X-mærke over det blå tæppe og vend mod skrivebordet, hvor vi vil formatere og sammensætte det sidste sæt breve. Ligesom før skal du oprette to (2) formatter objekter med navnene blue_1 og blue_2 med klassens notation, sådan her: blue_1 = Formatter(), blue_2 = Formatter(). Opret en liste kaldet blue_letters til at formatere og sammensætte alle brevene.
Endnu en gang, opret en for-løkke med fire (4) cyklusser, og brug de forudskrevne strenge til at formatere navnelisterne og tilføje dem til listen blue_letters ved hjælp af funktionen format(). I dette tilfælde skal du parre blue_1 formatteringsobjekterne med listen names_c og blue_2 formatteringsobjekterne med listen names_b. Alt dette gøres på samme måde som over det røde tæppe, men med forskellige værdier, hvilket viser alsidigheden ved at bruge formater og skabeloner. Når du er færdig, skal du bruge funktionen write() med blue_letters for at arkivere de sidste breve og fuldføre niveauet.