Câu 1Kết quả của string.Template("Hi $name").substitute(name="Bob") là gì?
string và textwrap — Hằng số ký tự, Template và định dạng
Hằng string.ascii_letters / digits, thay thế $name với string.Template, gỡ thụt lề với textwrap.dedent, và xuống dòng theo độ rộng với fill, qua mẫu email xác nhận đơn hàng.
Vai trò của string và textwrap
string và textwrap là các module phụ trợ bổ sung cho việc xử lý chuỗi hằng ngày. string cung cấp hằng số ký tự (tập hợp các chữ cái, chữ số và ký hiệu) và Template (thay thế template kiểu $name); textwrap đảm nhận định dạng chuỗi nhiều dòng (loại bỏ thụt lề và xuống dòng theo độ rộng). Bạn dùng đến chúng khi f-string hoặc replace chưa đủ.
string — Hằng số ký tự và thay thế template
Module string có hai nhóm chức năng. Nhóm thứ nhất là hằng số ký tự như string.ascii_letters (52 chữ cái), string.digits (0–9), và string.punctuation (ký hiệu), giúp bạn không phải tự định nghĩa "thế nào là chữ cái / chữ số".
Nhóm thứ hai là string.Template — bạn nhúng các biến có tiền tố $ kiểu $name vào chuỗi, sau đó thay thế bằng substitute(name="giá trị"). Trông giống f-string (f"{name}"), nhưng Template có bộ phân tích đơn giản và an toàn, phù hợp khi chính bản thân template đến từ đầu vào của người dùng (ví dụ template nội dung email).
$name trong chuỗi bằng giá trị thông qua substitute.| Hằng số / Lớp | Nội dung | Công dụng |
|---|---|---|
| string.ascii_lowercase | abcdefghijklmnopqrstuvwxyz | 26 chữ cái thường |
| string.ascii_uppercase | ABCDEFGHIJKLMNOPQRSTUVWXYZ | 26 chữ cái hoa |
| string.ascii_letters | ghép hai hằng trên (52 ký tự) | kiểm tra chữ cái, sinh chuỗi ngẫu nhiên |
| string.digits | 0123456789 | kiểm tra chữ số |
| string.punctuation | ! " # $ % & ' ... v.v. | kiểm tra ký hiệu |
| string.Template(s) | lớp template kiểu $name | nội dung email, template thông báo |
textwrap — Loại thụt lề triple-quote và xuống dòng theo độ rộng
textwrap là module thư viện chuẩn dùng để làm đẹp chuỗi. Hai hàm bạn dùng nhiều nhất là textwrap.dedent (loại bỏ thụt lề chung ở đầu mỗi dòng trong chuỗi viết bằng triple-quote) và textwrap.fill (xuống dòng một chuỗi dài theo độ rộng cho trước).
Khi bạn viết chuỗi nhiều dòng kiểu """...""" trong code, mức thụt lề ở mã nguồn bị nhúng thẳng vào chuỗi. dedent chỉ loại bỏ phần khoảng trắng đầu dòng chung, nên code vẫn được thụt lề đẹp mà chuỗi xuất ra vẫn sạch.
| Hàm | Chức năng | Giá trị trả về |
|---|---|---|
| textwrap.dedent(text) | loại bỏ thụt lề chung ở đầu | chuỗi đã làm sạch |
| textwrap.fill(text, width=N) | xuống dòng theo độ rộng N thành 1 chuỗi | 1 chuỗi có chứa ký tự xuống dòng |
| textwrap.wrap(text, width=N) | tách thành các dòng theo độ rộng N | list các chuỗi |
| textwrap.shorten(text, w) | nếu kết quả vượt độ rộng N, kết thúc bằng [...] | chuỗi đã rút gọn |
import textwrap
# dedent: loại thụt lề khỏi chuỗi triple-quote
raw = """
Xin chào.
Hôm nay trời đẹp.
"""
print(textwrap.dedent(raw).strip())
# Xin chào.
# Hôm nay trời đẹp.
# fill: xuống dòng (tiếng Anh thể hiện rõ nhất)
long_text = "Python is a language that lets you work quickly and integrate systems."
print(textwrap.fill(long_text, width=30))
# Python is a language that
# lets you work quickly and
# integrate systems.
Kết hợp dedent với strip
Chuỗi triple-quote thường bắt đầu và kết thúc bằng ký tự xuống dòng, nên dòng textwrap.dedent(raw).strip() (dedent + cắt khoảng trắng hai đầu) là pattern phổ biến. strip là method có sẵn của chuỗi, loại bỏ khoảng trắng (kể cả ký tự xuống dòng) ở cả hai đầu.
Kiểm tra kiến thức
Hãy trả lời từng câu hỏi một.
Câu 2Cái nào loại bỏ thụt lề chung ở đầu khỏi văn bản viết trong triple quote (có thụt lề ở mã nguồn)?
Câu 3textwrap.fill(text, width=20) làm gì?