Trong lập trình Python, đôi khi bạn sẽ cần biểu diễn những ký tự đặc biệt, không thể hiển thị trực tiếp trong chuỗi. Đó là lúc ký tự thoát (escape characters) giúp ích cho bạn. Ký tự này đưa các ký tự như dấu xuống dòng, dấu tab, hoặc thậm chí là dấu nháy vào trong chuỗi một cách dễ dàng. Vậy cụ thể, ký tự thoát trong Python là gì và chúng được sử dụng như thế nào? Hãy cùng tìm hiểu chi tiết hơn trong bài viết này.
Các điểm chính
Khi đọc xong bài viết, bạn sẽ:
- Hiểu rõ khái niệm ký tự thoát trong Python: Người đọc sẽ nắm vững định nghĩa ký tự thoát là gì, tại sao cần sử dụng ký tự thoát trong lập trình Python.
- Nắm được bảng ký tự thoát thông dụng: Người đọc sẽ biết và ghi nhớ các ký tự thoát phổ biến (như
\n
,\t
,\\
,\"
,\'
) và công dụng của từng ký tự. - Biết cách sử dụng ký tự thoát trong thực tế: Thông qua các ví dụ minh họa, người đọc sẽ biết cách áp dụng ký tự thoát để định dạng chuỗi, xử lý các ký tự đặc biệt trong Python.
- Xây dựng nền tảng vững chắc để tiếp tục học lập trình Python: Hiểu rõ ký tự thoát là một bước quan trọng để bạn có thể tiếp tục tìm hiểu sâu hơn về ngôn ngữ lập trình Python
- Tiết kiệm thời gian học và tiếp thu nhanh chóng kiến thức: Kiến thức đã được tối ưu và phù hợp với bạn đọc là người mới.
Ký tự thoát trong Python là gì?
Ký tự thoát là một ký tự đặc biệt được theo sau bởi dấu gạch chéo ngược (\
). Ký tự thoát báo cho trình thông dịch Python biết rằng ký tự (hoặc chuỗi ký tự) đi sau dấu gạch chéo ngược có một ý nghĩa đặc biệt. Ví dụ, \n
là một chuỗi thoát đại diện cho ký tự xuống dòng mới. Khi Python gặp chuỗi này trong một chuỗi, Python sẽ hiểu rằng cần phải bắt đầu một dòng mới tại vị trí đó.

\
)Trừ khi có tiền tố 'r'
hoặc 'R'
, các chuỗi thoát trong chuỗi ký tự và chuỗi byte (bytes literals) sẽ được diễn giải theo các quy tắc tương tự như quy tắc được sử dụng trong Standard C. Trong Python, một chuỗi trở thành chuỗi “thô” (raw string) nếu chuỗi đó có tiền tố "r"
hoặc "R"
đứng trước dấu nháy. Vì vậy, 'Hello'
là một chuỗi thông thường trong khi r'Hello'
là một chuỗi thô.
Hãy xem ví dụ dưới đây để thấy sự khác biệt giữa chuỗi thông thường và chuỗi thô, áp dụng vào tình huống in đường dẫn file trong hệ điều hành:
# Chuỗi thông thường
duong_dan_thuong = "C:\thu_muc\noi_dung\ten_file.txt"
print(duong_dan_thuong)
# Chuỗi thô
duong_dan_tho = r"C:\thu_muc\noi_dung\ten_file.txt"
print(duong_dan_tho)
Kết quả của đoạn code trên:
C: hu_muc
oi_dung en_file.txt
C:\thu_muc\noi_dung\ten_file.txt
Giải thích:
- Chuỗi thông thường (
duong_dan_thuong
): Khi Python diễn giải chuỗi này, Python gặp các ký tự\t
(tab) và\n
(newline) và coi đó là các ký tự thoát. Vì vậy, Python sẽ chèn một ký tự tab vào vị trí\t
và xuống dòng ở vị trí\n
. - Chuỗi thô (
duong_dan_tho
): Vì chuỗi này có tiền tốr
, Python sẽ coi toàn bộ chuỗi là “thô” – tức là mọi ký tự trong chuỗi đều được giữ nguyên, không có ký tự nào được coi là ký tự thoát cả. Do đó, Python in ra đúng đường dẫn ban đầu.
Trong trường hợp bình thường, không có sự khác biệt giữa chuỗi thông thường và chuỗi thô. Tuy nhiên, khi một ký tự thoát được nhúng vào trong chuỗi, chuỗi thông thường sẽ diễn giải chuỗi thoát đó, trong khi chuỗi thô sẽ không xử lý ký tự thoát.
Ví dụ sau đây minh họa rõ hơn điều này. Ta sẽ in ra một đoạn văn bản, một lần sử dụng chuỗi thông thường và một lần sử dụng chuỗi thô, và xem kết quả khác nhau như thế nào.
# Chuỗi thông thường
van_ban_thuong = "Xin chào!\nHẹn gặp lại."
print(van_ban_thuong)
# Chuỗi thô
van_ban_tho = r"Xin chào!\nHẹn gặp lại."
print(van_ban_tho)
Khi chạy đoạn mã trên, kết quả sẽ là:
Xin chào!
Hẹn gặp lại.
Xin chào!\nHẹn gặp lại.
Giải thích chi tiết:
- Chuỗi thông thường (
van_ban_thuong
): Khi Python gặp ký tự\n
(ký tự xuống dòng) trong chuỗi, Python sẽ diễn giải ký tự thoát\n
này thành một dấu xuống dòng thực sự. Do đó, “Hẹn gặp lại.” được in ở dòng tiếp theo. - Chuỗi thô (
van_ban_tho
): Vì chuỗi này được khai báo với tiền tốr
, Python bỏ qua, không diễn giải ký tự thoát. Python sẽ giữ nguyên ký tự\n
như một phần của chuỗi, và in ra chính xác như những gì bạn thấy trong code.
Bảng ký tự thoát trong Python
Bảng sau đây liệt kê các ký tự thoát khác nhau được sử dụng trong Python:
Ký Tự Thoát | Ý Nghĩa |
\<newline> | Dấu gạch chéo ngược và ký tự xuống dòng (newline) được bỏ qua |
\\ | Dấu gạch chéo ngược (\ ) |
\' | Dấu nháy đơn (' ) |
\" | Dấu nháy kép (" ) |
\a | Chuông ASCII (BEL) |
\b | Xóa lùi ASCII (BS) – Đưa con trỏ về lại một vị trí |
\f | Đẩy trang ASCII (FF) |
\n | Xuống dòng ASCII (LF) – Đưa con trỏ xuống dòng mới |
\r | Về đầu dòng ASCII (CR) – Đưa con trỏ về đầu dòng hiện tại |
\t | Tab ngang ASCII (TAB) |
\v | Tab dọc ASCII (VT) |
\ooo | Ký tự có giá trị bát phân ooo (ooo là các số từ 0 đến 7) |
\xhh | Ký tự có giá trị thập lục phân hh (hh là các số và ký tự từ 0-9, A-F) |
Ví dụ về ký tự thoát trong Python
Đoạn code dưới đây minh họa cách sử dụng các chuỗi thoát (escape sequences) đã được liệt kê trong bảng (bảng mà chúng ta không đề cập đến ở đây, nhưng nó chứa các chuỗi thoát như \n
, \t
, ...
):
# Bỏ qua ký tự xuống dòng
chuoi = 'Chuỗi này sẽ không xuống dòng \
dù có dấu gạch chéo ngược.'
print(chuoi)
# Thoát dấu gạch chéo ngược
chuoi = 'Dấu \\ là ký tự gạch chéo ngược'
print(chuoi)
# Thoát dấu nháy đơn
chuoi = 'Xin chào \'Python\''
print(chuoi)
# Thoát dấu nháy kép
chuoi = "Xin chào \"Python\""
print(chuoi)
# Ký tự xóa lùi (backspace)
chuoi = 'Xo\ba lùi' # \b sẽ xoá ký tự trước nó
print(chuoi)
# Ký tự chuông ASCII (bell)
chuoi = 'Chuông\a' # Phát ra tiếng bíp (tuỳ hệ thống)
print(chuoi)
# Xuống dòng mới (newline)
chuoi = 'Xin chào\nPython'
print(chuoi)
# Tab ngang (horizontal tab)
chuoi = 'Xin chào\tPython'
print(chuoi)
# Form feed (tách trang)
chuoi = "Đầu trang\fCuối trang"
print(chuoi)
# Ký tự ở dạng bát phân
chuoi = "\117" # 117 trong bát phân tương ứng chữ 'O' (hoa) trong ASCII
print(chuoi)
# Ký tự ở dạng thập lục phân
chuoi = "\x4F" # 4F trong thập lục phân tương ứng 'O' (hoa) trong ASCII
print(chuoi)
Kết quả khi chạy:
Chuỗi này sẽ không xuống dòng dù có dấu gạch chéo ngược.
Dấu \ là ký tự gạch chéo ngược
Xin chào ‘Python’
Xin chào “Python”
Xo lùi
Chuông
Xin chào
Python
Xin chào Python
Đầu trang
Cuối trang
O
O
Giải thích từng phần:
chuoi = 'Chuỗi này sẽ không xuống dòng \ dù có dấu gạch chéo ngược.'
: Dấu gạch chéo ngược (\
) ở cuối dòng ngay trước dấu xuống dòng (enter) sẽ báo hiệu Python rằng đây là một dòng code liên tục, bỏ qua ký tự xuống dòng. Dòng này và dòng sau nó, Python coi nó là cùng một dòng.chuoi = 'Dấu \\ là ký tự gạch chéo ngược'
: Để hiển thị dấu gạch chéo ngược, ta cần dùng hai dấu\\
. Một dấu\
được coi là ký tự bắt đầu chuỗi thoát.chuoi = 'Xin chào \'Python\''
: Dùng\'
để hiển thị dấu nháy đơn bên trong một chuỗi được bao quanh bởi dấu nháy đơn.chuoi = "Xin chào \"Python\""
: Dùng\"
để hiển thị dấu nháy kép bên trong một chuỗi được bao quanh bởi dấu nháy kép.chuoi = 'Xo\ba lùi'
:\b
xóa ký tự ngay trước nó (ở đây là chữ ‘a’). Kết quả hiển thị “Xo lùi”.chuoi = 'Chuông\a'
:\a
tạo ra âm thanh chuông (bell) trên một số hệ thống (thường là tiếng bíp).chuoi = 'Xin chào\nPython'
:\n
tạo ra một dòng mới. Kết quả là “Xin chào” ở một dòng và “Python” ở dòng tiếp theo.chuoi = 'Xin chào\tPython'
:\t
tạo ra một khoảng tab ngang.chuoi = "Đầu trang\fCuối trang"
: Ký tự form feed, đưa con trỏ in sang một trang in mới.chuoi = "\117"
:\117
biểu diễn ký tự có mã ASCII ở dạng bát phân là 117 (chữ ‘O’).chuoi = "\x4F"
:\x4F
biểu diễn ký tự có mã ASCII ở dạng thập lục phân là 4F (cũng là chữ ‘O’).
Lời kết
Như vậy, chúng ta đã cùng nhau tìm hiểu chi tiết về ký tự thoát trong Python, từ khái niệm, bảng tổng hợp các ký tự thoát, cho đến các ví dụ minh họa cụ thể. Hy vọng rằng, với những kiến thức này, bạn có thể hiểu rõ hơn về cách Python xử lý các ký tự đặc biệt trong chuỗi và ứng dụng chúng một cách hiệu quả trong quá trình lập trình.
Mọi người cũng đọc