Corso Avanzato di Sviluppo Python
Capitolo
>
Livello
Moduli di Stringa e Tempo
Modulo Stringa
Obiettivo
Compila i dati dell'applicazione e invia le lettere di risposta utilizzando il modulo string.
Ora che il materiale per la nuova costruzione della fattoria è stato contabilizzato, è il momento di concentrarci sul nuovo personale per la fattoria. Abbiamo diverse lettere da inviare per le candidature di lavoro, e naturalmente questo richiederebbe molta scrittura, tuttavia possiamo usare il modulo string per compensare questo, permettendoci di creare template e formattare il testo per rendere più gestibili i corpi di testo.
Importare il modulo string questa volta avverrà in modo leggermente diverso rispetto agli altri moduli poiché importeremo classi che estendono il modulo, e verrà eseguito nel seguente modo:
import string from string import Template from string import Formatter
Questo ci dà accesso al modulo stesso così come alle classi per il template e la formattazione che includono le loro funzioni. Per i nostri scopi, useremo le seguenti funzioni e classi:
string.capwords(): Questa funzione trasforma le parole di una stringa in modo da avere una capitalizzazione corretta, rendendo la prima lettera di una parola maiuscola e le restanti minuscole, indipendentemente da come la stringa sia formattata.Template(): Questa è una classe stringa, utilizzata per creare un oggetto template. Essa utilizza la funzionesubstitute()che permette di impostare una stringa e evidenziare una posizione usando il simbolo$per sostituire i dati. Questo permette di creare stringhe modulari da usare a piacimento.Formatter(): Questa è una classe stringa, utilizzata per formattare o comporre una stringa. Funziona in modo simile alla classeTemplate()ma è più robusta e migliore per sequenze di stringhe più lunghe. Utilizza la funzioneformat()che permette di impostare una stringa ed inserire dati tramite{}.
Inizia camminando verso il segno X chiaro e usa la funzione read() mentre ti rivolgi all'archivio; questo ti permetterà di accedere alle cartelle con il nome dei vari candidati. Queste cartelle sono presenti come tre costanti liste chiamate: folder_a, folder_b e folder_c.
Cammina verso il segno X scuro sul tappeto verde e rivolgi lo sguardo alla scrivania. Crea tre liste chiamate: names_a, names_b e names_c. Usa le list comprehension con la funzione string.capwords() per formattare correttamente la capitalizzazione dei nomi. Associa le liste alle costanti che usano le stesse lettere nel nome; per esempio, per names_a usa string.capwords() con folder_a, in questo modo: names_a = [string.capwords(x) for x in folder_a]. Usa la stessa formula per popolare names_b e names_c.
Crea una lista chiamata all_names e somma le tre liste di nomi, in questo modo: all_names = names_a + names_b + names_c. Questo combinerà tutte le liste in una lista più grande, seguito dall'uso della funzione Python join() che unirà tutti gli elementi della lista in una stringa. Puoi anche specificare cosa inserire tra ogni elemento della lista dichiarandolo tra virgolette, così: all_names = ", ".join(all_templates). Usa la funzione predefinita write() con la lista all_names per registrare tutti i nomi con la corretta capitalizzazione.
Successivamente, avvicinati al segno X dorato e rivolgi lo sguardo alla scrivania; qui imposteremo i template. Avremo due oggetti template predefiniti chiamati red_templates e blue_templates:
red_template = Template( "Hello, $name , thank you for applying for this position.") blue_template = Template( "Esteemed , $name , your application has been approved.")
Ognuno di questi template ha un messaggio unico, tuttavia hanno in comune un segnaposto etichettato $name. Il simbolo $ viene utilizzato per indicare un segnaposto che può essere sostituito con una stringa a tua scelta, in questo caso, come suggerisce il titolo, si tratta di un nome. Se nessun valore viene sostituito, il template utilizzerà semplicemente il segnaposto presente nella stringa. Per completare questo passaggio, crea una lista chiamata all_templates.
Crea un ciclo for con quattro iterazioni, in modo da sostituire i nomi nelle tre liste con i template che contengono i nomi. Per esempio, applicheremo il red_template alla lista names_a. Usa la funzione substitute() della classe Template() per sostituire il segnaposto $name nel template con i nomi presenti nella lista.
for x in range(4): names_a[x] = red_template.substitute(name=names_a[x])
Fai lo stesso con names_b e names_c: per names_b usa il red_template e, per names_c, usa il blue_template.
Una volta che tutte le liste di nomi sono state popolate con i nuovi template, è il momento di revisionarle. Crea una nuova lista chiamata all_templates e aggiungi tutte le liste di nomi insieme, in questo modo: all_templates = names_a + names_b + names_c. Usa la stessa funzione join() come prima per compilare tutti i nomi formattati in una forma leggibile, così: all_templates = "\n".join(all_templates). Usa la funzione predefinita write() con all_templates per elencare tutte le intestazioni per i diversi nomi.
Successivamente, avvicinati al segno X scuro sul tappeto rosso e rivolgi lo sguardo alla scrivania; qui formatteremo e scriveremo il primo set di lettere. Inizia creando due oggetti formatter chiamati red_1 e red_2 con la notazione di classe, in questo modo: red_1 = Formatter(), red_2 = Formatter(). Per la composizione delle lettere, crea una lista chiamata red_letters.
Proprio come prima, utilizzeremo un ciclo for con quattro iterazioni. Avremo due insiemi di stringhe predefinite che verranno formattate utilizzando la funzione format() e a cui verranno aggiunti i nomi. Queste stringhe formattate verranno aggiunte alla lista red_letters, formando un elenco completo di lettere da inviare. Per esempio, gli oggetti formattati red_1 verranno formattati con la lista names_a e aggiunti alla lista 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]))
Fai lo stesso con l'oggetto di formattazione red_2 utilizzando la sua stringa predefinita e aggiungi names_b al ciclo. Una volta che tutto è stato impostato, usa la funzione join() con red_letters per compilare i dati in un unico file, in questo modo: red_letters = "\n".join(red_letters). Usa la funzione write() con red_letters per registrare tutte le lettere formattate che verranno inviate.
Infine, avvicinati al segno X scuro sul tappeto blu e rivolgi lo sguardo alla scrivania; qui formatteremo e comporremo l'ultimo set di lettere. Proprio come prima, crea due oggetti formatter chiamati blue_1 e blue_2 con la notazione di classe, in questo modo: blue_1 = Formatter(), blue_2 = Formatter(). Crea una lista blue_letters per formattare e comporre tutte le lettere.
Ancora una volta, crea un ciclo for con quattro iterazioni e utilizza le stringhe predefinite per formattare le liste di nomi e aggiungerle alla lista blue_letters mediante la funzione format(). In questo caso, abbina gli oggetti di formattazione blue_1 con la lista names_c e gli oggetti blue_2 con la lista names_b. Il tutto viene fatto alla stessa maniera del tappeto rosso, ma usando valori differenti, dimostrando la versatilità dell'uso di formati e template. Una volta terminato, usa la funzione write() con blue_letters per archiviare l'ultimo insieme di lettere e completare il livello.