Khóa học Phát triển Python Nâng cao
Chương
>
Cấp độ
Các mô-đun Chuỗi & Thời Gian
Mô-đun Chuỗi
Mục tiêu
Tổng hợp dữ liệu ứng tuyển và gửi thư phản hồi bằng cách sử dụng module string.
Bây giờ, khi vật liệu cho việc xây dựng trang trại mới đã được tính toán, đã đến lúc chuyển sự chú ý sang nhân sự mới cho trang trại. Chúng ta có một số thư cần gửi cho các ứng viên xin việc, điều này tự nhiên đòi hỏi phải viết nhiều, tuy nhiên chúng ta có thể sử dụng module string để bù đắp cho điều này bằng cách tạo các mẫu và định dạng văn bản nhằm giúp xử lý các đoạn văn bản một cách dễ dàng hơn.
Việc nhập module string lần này sẽ diễn ra hơi khác so với các module khác vì chúng ta sẽ nhập các lớp mở rộng module, và sẽ được thực thi theo cách sau:
import string from string import Template from string import Formatter
Điều này cho chúng ta truy cập được vào chính module cũng như các lớp template và định dạng có các chức năng riêng của chúng. Với mục đích của chúng ta, chúng ta sẽ sử dụng các hàm và lớp sau:
string.capwords(): Hàm này chuyển đổi các từ trong chuỗi sao cho chữ cái đầu tiên của từ được viết hoa và các chữ còn lại viết thường bất kể cách định dạng chuỗi ban đầu.Template(): Đây là một lớp chuỗi, nó được sử dụng để tạo đối tượng mẫu. Nó sử dụng hàmsubstitute()cho phép bạn tạo một chuỗi và đánh dấu một vị trí bằng cách sử dụng ký hiệu$để thay thế dữ liệu. Điều này cho phép bạn tạo ra các chuỗi mô-đun mà bạn có thể sử dụng tùy ý.Formatter(): Đây là một lớp chuỗi, nó được sử dụng để định dạng hoặc soạn thảo một chuỗi. Hoạt động tương tự như lớpTemplate()nhưng mạnh mẽ hơn và phù hợp với chuỗi lớn. Nó sử dụng hàmformat()cho phép bạn tạo một chuỗi và chèn dữ liệu vào bên trong bằng{}.
Bắt đầu bằng cách đi tới dấu X sáng và sử dụng hàm read() khi đối diện với tủ hồ sơ, điều này sẽ cho phép bạn truy cập vào các thư mục có tên của các ứng viên khác nhau. Các thư mục này được lưu dưới dạng ba hằng số danh sách có tên: folder_a, folder_b và folder_c.
Tiếp theo, đi tới dấu X tối qua tấm thảm xanh và đối diện với bàn làm việc. Tạo ba danh sách có tên: names_a, names_b và names_c. Sử dụng list comprehension với hàm string.capwords() để định dạng chữ hoa đúng cho tên. Ghép nối các danh sách với các hằng số có sử dụng cùng chữ cái trong tên, ví dụ với names_a sử dụng string.capwords() với folder_a, như thế này: names_a = [string.capwords(x) for x in folder_a]. Sử dụng cùng công thức này để điền dữ liệu cho names_b và names_c.
Tạo một danh sách có tên all_names và cộng ba danh sách tên lại với nhau, như thế này: all_names = names_a + names_b + names_c. Điều này sẽ kết hợp tất cả các danh sách lại với nhau thành một danh sách lớn hơn, sau đó sử dụng hàm join() của Python để nối tất cả các mục của danh sách thành một chuỗi. Bạn cũng có thể chỉ định những gì sẽ được chèn giữa các mục trong danh sách bằng cách đặt nó trong dấu ngoặc kép, như thế này: all_names = ", ".join(all_templates). Sử dụng hàm write() đã được viết sẵn với danh sách all_names để ghi lại tất cả các tên theo định dạng chữ hoa thích hợp.
Tiếp theo, đi tới dấu X vàng và đối diện với bàn làm việc, ở đây chúng ta sẽ thiết lập các mẫu. Tại đây, chúng ta sẽ có hai đối tượng mẫu đã được viết sẵn có tên red_template và blue_template:
red_template = Template( "Hello, $name , thank you for applying for this position.") blue_template = Template( "Esteemed , $name , your application has been approved.")
Mỗi mẫu này có một thông điệp riêng, tuy nhiên chúng có điểm chung là đều có một placeholder mang nhãn $name. Ký hiệu $ được sử dụng để đánh dấu một placeholder có thể được thay thế bằng một chuỗi mà bạn chọn, trong trường hợp này, theo như tiêu đề gợi ý, đó là tên. Nếu không có giá trị nào được thay thế, mẫu sẽ giữ nguyên placeholder trong chuỗi. Để bổ sung điều này, hãy tạo một danh sách có tên all_templates.
Tạo một vòng lặp for với bốn (4) vòng lặp, với đó chúng ta sẽ thay thế tên trong các danh sách names bằng các mẫu chứa tên. Ví dụ, chúng ta sẽ áp dụng red_template cho danh sách names_a. Sử dụng hàm substitute() của lớp Template để thay thế placeholder $name trong mẫu bằng tên từ danh sách.
for x in range(4): names_a[x] = red_template.substitute(name=names_a[x])
Thực hiện tương tự với names_b và names_c; với names_b sử dụng red_template và với names_c sử dụng blue_template.
Khi tất cả các danh sách tên đã được điền đầy đủ với các mẫu mới, đã đến lúc xem xét chúng. Tạo một danh sách mới có tên all_templates và thêm tất cả các danh sách tên lại với nhau, như thế này: all_templates = names_a + names_b + names_c. Sử dụng cùng hàm join() như trước để kết hợp tất cả các tên đã được mẫu thành một định dạng dễ đọc, như thế này: all_templates = "\n".join(all_templates). Sử dụng hàm write() đã được viết sẵn với all_templates để liệt kê tất cả các tiêu đề cho các tên khác nhau.
Tiếp theo, đi tới dấu X tối qua tấm thảm đỏ và đối diện với bàn làm việc, ở đây chúng ta sẽ định dạng và viết bộ thư đầu tiên. Bắt đầu bằng cách tạo hai đối tượng formatter có tên red_1 và red_2 với ký hiệu lớp, như thế này: red_1 = Formatter(), red_2 = Formatter(). Đối với việc soạn thảo thư, tạo một danh sách có tên red_letters.
Giống như trước, chúng ta sẽ có một vòng lặp for với bốn (4) vòng lặp. Chúng ta sẽ có hai bộ chuỗi đã được viết sẵn sẽ được định dạng bằng hàm format() và sẽ thêm biến tên vào đó. Những chuỗi đã được định dạng này sẽ được thêm vào danh sách red_letters, tạo thành một danh sách thư đầy đủ sẽ được gửi đi. Ví dụ, đối tượng định dạng red_1 sẽ được định dạng với danh sách names_a và sau đó được thêm vào danh sách 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]))
Thực hiện tương tự với đối tượng định dạng red_2 sử dụng chuỗi đã được viết sẵn của nó và thêm names_b vào vòng lặp. Khi đã thiết lập xong, sử dụng hàm join() với red_letters để kết hợp dữ liệu thành một tập tin duy nhất, như thế này: red_letters = "\n".join(red_letters). Sử dụng hàm write() với red_letters để ghi lại tất cả các lá thư đã được định dạng sẽ được gửi đi.
Cuối cùng, đi tới dấu X tối qua tấm thảm xanh và đối diện với bàn làm việc, ở đây chúng ta sẽ định dạng và soạn thảo bộ thư cuối cùng. Giống như trước, hãy tạo hai đối tượng formatter có tên blue_1 và blue_2 với ký hiệu lớp, như thế này: blue_1 = Formatter(), blue_2 = Formatter(). Tạo một danh sách có tên blue_letters để định dạng và soạn thảo tất cả các thư.
Một lần nữa, tạo một vòng lặp for với bốn (4) vòng lặp và sử dụng các chuỗi đã được viết sẵn để định dạng các danh sách tên và thêm chúng vào danh sách blue_letters bằng cách sử dụng hàm format(). Trong trường hợp này, sử dụng đối tượng định dạng blue_1 với danh sách names_c và đối tượng định dạng blue_2 với danh sách names_b. Tất cả được thực hiện tương tự như trên tấm thảm đỏ, nhưng sử dụng các giá trị khác nhau, thể hiện sự linh hoạt của việc sử dụng định dạng và mẫu. Khi hoàn tất, sử dụng hàm write() với blue_letters để lưu lại phần cuối của các thư và hoàn thành cấp độ.