קורס פיתוח מתקדם בפייתון
פרק
>
רמה

מודולי מחרוזת וזמן
מודול מחרוזת

מטרה

אסוף נתוני בקשות ושלח מכתבי תגובה בעזרת מודול המחרוזות.

עכשיו, כשהחומר לבניית החווה החדש נמדד, הגיע הזמן להעביר את תשומת הלב לגיוס עובדים חדשים לחווה. יש לנו מספר מכתבים שיש לשלוח עבור מועמדויות לעבודה, ובאופן טבעי הדבר היה דורש המון כתיבה, אך אנו יכולים להשתמש במודול המחרוזות כדי לפצות על כך – ליצור תבניות ולעצב את הטקסט כך שיהיה קל יותר לטפל בגופים של טקסט.

ייבוא מודול המחרוזות הפעם יתבצע בצורה שונה במעט משאר המודולים, מכיוון שנייבא מחלקות שמרחיבות את המודול, והן יופעלו באופן הבא:

import string from string import Template from string import Formatter

זה נותן לנו גישה למודול עצמו וכן גישה למחלקות של תבניות ועיצוב הכוללות פונקציות משלהן. לצרכינו, נשתמש בפונקציות ובמחלקות הבאות:

  • string.capwords(): פונקציה זו ממירה את המילים במחרוזת כך שהאות הראשונה של כל מילה תהיה באות גדולה והיתר באותיות קטנות, ללא קשר לפורמט שבו המחרוזת כתובה.
  • Template(): מחלקת מחרוזת המשמשת ליצירת אובייקט תבנית. היא משתמשת בפונקציה substitute() המאפשרת להגדיר מחרוזת ולהדגיש מיקום באמצעות סימן ה־$ להחלפת נתונים. זה מאפשר ליצור מחרוזות מודולריות לשימוש לפי הצורך.
  • Formatter(): מחלקת מחרוזת המשמשת לעיצוב או להרכבת מחרוזת. היא פועלת בדומה למחלקת Template(), אך היא יותר עוצמתית ומתאימה לרצפי מחרוזות גדולים יותר. היא משתמשת בפונקציה format() המאפשרת להגדיר מחרוזת ולהחדיר לתוכה נתוני מחרוזת באמצעות {}.

התחל בהליכה לסמל ה־X הבהיר ושימוש בפונקציה read() כאשר אתה פונה לארון הקבצים, כך תוכל לגשת לתיקיות עם שמות של מועמדים שונים. תיקיות אלו קיימות כשלושה (3) קבועים של רשימות בשם: folder_a , folder_b ו- folder_c.

לך אל סמל ה־X הכהה מעל השטיח הירוק ופנה לשולחן. צור שלוש (3) רשימות בשם: names_a , names_b ו- names_c. השתמש ב-list comprehensions יחד עם הפונקציה string.capwords() לעיצוב שמות עם אותיות ראשוניות גדולות כראוי. חבר את הרשימות עם הקבועים המשתמשים באותם אותיות בשמם, לדוגמה עבור names_a השתמש ב־string.capwords() עם folder_a, כך: names_a = [string.capwords(x) for x in folder_a]. השתמש באותה נוסחה לאכלוס names_b ו- names_c.

צור רשימה בשם all_names וסכם את שלוש (3) רשימות השמות, כך: all_names = names_a + names_b + names_c. פעולה זו תשלב את כל הרשימות לרשימה אחת גדולה. המשך בכך ושימוש בפונקציה join() של פייתון שתחבר את כל פריטי הרשימה למחרוזת. ניתן גם לציין מה להכניס בין כל פריט על ידי הגדרתו בתוך מרכאות, לדוגמה: all_names = ", ".join(all_templates). השתמש בפונקציה הכתובה מראש write() עם רשימת all_names כדי לרשום את כל השמות עם העיצוב הנכון.

לאחר מכן, פנה לסמל ה־X הזהוב ופנה לשולחן, כיוון שכאן נגדיר תבניות. כאן יהיו לנו שני אובייקטים של תבניות מוכנות מראש בשם red_templates ו- blue_templates:

red_template = Template( "Hello, $name , thank you for applying for this position.") blue_template = Template( "Esteemed , $name , your application has been approved.")

לכל אחת מהתבניות הללו יש הודעה ייחודית, אך הן חולקות מרכיב משותף – placeholder בשם $name. הסמל $ משמש לציון placeholder שניתן להחלפה במחרוזת שתבחר, ובמקרה זה, כפי שכותרת המרמה מציינת, מדובר בשם. אם לא מוחלף ערך, התבנית תשתמש ב-placeholder כפי שהוא במחרוזת. כהשלמה לכך, צור רשימה בשם all_templates.

צור לולאת for עם ארבע (4) מחזורים, שבה נחליף את השמות ברשימות השמות בתבניות הכוללות את השמות. לדוגמה, נשתמש בתבנית red_template עבור רשימת names_a. השתמש בפונקציה substitute() של מחלקת Template() להחלפת placeholder $name בתבנית עם השמות מהרשימה.

for x in range(4): names_a[x] = red_template.substitute(name=names_a[x])

עשה את אותו הדבר עם names_b ו- names_c; עבור names_b השתמש גם ב־red_template ועבור names_c השתמש ב־blue_template.

ברגע שכל רשימות השמות מולאו בתבניות החדשות, הגיע הזמן לעיין בהן. צור רשימה חדשה בשם all_templates ואחד את כל רשימות השמות יחד, כך: all_templates = names_a + names_b + names_c. השתמש שוב בפונקציית join() כדי לאחד את כל השמות המעוצבים לתצוגה קריאה, כך: all_templates = "\n".join(all_templates). לבסוף, השתמש בפונקציה הכתובה מראש write() עם all_templates כדי לרשום את כל הכותרות עבור השמות השונים.

לאחר מכן, פנה לסמל ה־X הכהה מעל השטיח האדום ופנה לשולחן, כאן נעצב ונרכיב את קבוצת המכתבים הראשונה. התחל ביצירת שני (2) אובייקטי formatter בשם red_1 ו- red_2 באמצעות הסימון של המחלקה, כך: red_1 = Formatter(), red_2 = Formatter(). לצורך הרכבת המכתבים, צור רשימה בשם red_letters.

בדומה להליכה הקודמת, ניצור לולאת for עם ארבע (4) מחזורים. יהיו לנו שתי קבוצות של מחרוזות מוכנות מראש שיעוצבו באמצעות פונקציית format() ונוסיף להן את משתנה השמות. מחרוזות אלו יעוצבו ויתווספו לרשימת red_letters ובכך יווצר מערך מקיף של מכתבים שישלחו. לדוגמה, אובייקט העיצוב red_1 יעוצב עם רשימת names_a ויתווסף לרשימת 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]))

עשה את אותו הדבר עם אובייקט העיצוב red_2 תוך שימוש במחרוזת המוכנה מראש והוסף את names_b ללולאה. לאחר סיום, השתמש בפונקציית join() עם red_letters כדי לאחד את הנתונים לקובץ יחיד, כך: red_letters = "\n".join(red_letters). לבסוף, השתמש בפונקציה write() עם red_letters כדי לרשום את כל המכתבים המעוצבים שיושלחו.

לבסוף, פנה לסמל ה־X הכהה מעל השטיח הכחול ופנה לשולחן, כאן נעצב ונרכיב את קבוצת המכתבים האחרונה. בדומה להליכים הקודמים, צור שני (2) אובייקטי formatter בשם blue_1 ו- blue_2 באמצעות הסימון של המחלקה, כך: blue_1 = Formatter(), blue_2 = Formatter(). צור רשימה בשם blue_letters לעיצוב והרכבת כל המכתבים.

שוב, צור לולאת for עם ארבע (4) מחזורים והשתמש במחרוזות המוכנות מראש לעיצוב רשימות השמות והוסף אותן לרשימת blue_letters באמצעות הפונקציה format(). במקרה זה, חבר את האובייקט blue_1 עם רשימת names_c ואת האובייקט blue_2 עם רשימת names_b. כל זה נעשה באותה שיטה כמו בשטיח האדום, אך עם ערכים שונים, מה שמדגים את הרב-גוניות שבשימוש בעיצובים ותבניות. לאחר סיום, השתמש בפונקציה write() עם blue_letters כדי לתעד את המכתבים האחרונים ולהשלים את הרמה.

ספר קוד