Cách sử dụng chuỗi thô raw string trong python | Laptrinhcanban.com

Cách sử dụng chuỗi thô raw string trong python

Trong các dự án python, bạn sẽ gặp một số chuỗi mà đằng trước đó được thêm ký tự r hoặc R. Chúng ta gọi chúng là chuỗi thô trong python (tiếng anh : raw string python). Vậy chuỗi thô trong python là gì và cách sử dụng như thế nào, hãy cùng học trong bài học sau đây.

Chuỗi thô raw string trong python là gì

Ở trong python, nếu chúng ta thêm ký tự r hoặc R vào trước một chuỗi chứa chuỗi thoát, thì những chuỗi thoát trong đó sẽ không bị coi là ký hiệu đặc biệt mà sẽ được coi như là một ký tự bình thường trong chuỗi.
Chúng ta gọi những chuỗi như vậy là chuỗi thô trong python(tiếng anh : raw string ; tiếng Nhật : raw文字列 )

Cú pháp viết chuỗi thô raw string trong python

Rất đơn giản, chúng ta chỉ cần thêm ký tự R hoặc r vào trước một chuỗi là có thể biến chuỗi đó thành chuỗi thô rồi.

r chuỗi
Hoặc
R chuỗi

Ví dụ, chúng ta có chuỗi mà trong đó chứa chuỗi thoát như sau:

s = 'a\tb\nA\tB'
print(s)

kết quả :

a    b
A B

Bạn có thể thấy ký tự như \t hay\n là các chuỗi thoát giúp tạo ký tự xuống dòng và ký tự tab trong kết quả rồi.

Tuy nhiên nếu bạn viết chuỗi trên thành một chuỗi thô trong python thì kết quả sẽ hoàn toàn khác đi đấy:

rs = r'a\tb\nA\tB'
print(rs)

kết quả:

a\tb\nA\tB

Lúc này chuỗi thoát \n và \t đã biến thành chuỗi thô nên các ký tự này chỉ được coi như là các ký tự bình thường trong chuỗi, do đó chúng được in ra màn hình.

Lại nữa, do chuỗi thoát trong chuỗi thô được coi như ký tự bình thường, nên các tính chất của chuỗi thô như độ dài chuỗi cũng khác so với chuỗi bình thường. Và khi dùng chuỗi này để tạo list bằng chuỗi trong python, kết quả nhận được cũng hoàn toàn khác nhau. Hãy cùng so sánh các kết quả như dưới đây:

s = 'a\tb\nA\tB'
rs = r'a\tb\nA\tB'

# dùng hàm len để tìm độ dài chuỗi
print(len(s))
#>> 7

print(len(rs))
#>> 10

# tạo list từ chuỗi
s_list=list(s)
rs_list=list(rs)

print(s_list)
#>> ['a', '\t', 'b', '\n', 'A', '\t', 'B']

print(rs_list)
#>> ['a', '\\', 't', 'b', '\\', 'n', 'A', '\\', 't', 'B']

Lưu ý, dấu gạch chéo ngược \ (tiếng anh : Backslash) ở chuỗi thô trong python sau khi được dùng để tạo list sẽ được biểu diễn bởi hai dấu gạch chéo ngược \\ như ví dụ trên.
Lý do là bởi vì dấu gạch chéo ngược \ thường được sử dụng để biểu diễn các ký tự đặc biệt trong python (ví dụ như chuỗi thoát), do đó để phân biệt với trường hợp dùng nó như là một ký tự thông thường, python cần tới hai ký tự dấu gạch chéo ngược \\ để biểu diễn nó.

Ứng dụng của chuỗi thô raw string trong python

Dùng chuỗi thô để viêt đường dẫn windows trong python

Chuỗi thô đặc biệt hữu dụng khi chúng ta cần viết các đường dẫn(path) windows.
Như các bạn đã biết, các đường dẫn Windows được phân tách bằng dấu gạch chéo ngược \, do đó khi viết đường dẫn windows trong python, do python coi \ như ký tự đặc biệt và bỏ qua nó, nên bạn phải mất nhiều công sức để chỉ cho python biết mình muốn sử dụng \ như là một ký tự thông thường chứ không phải là một ký tự đặc biệt.
Tuy nhiên với chuỗi thô, do python coi \ trong chuỗi thô là ký tự bình thường chứ không bỏ qua nó, nên bài toán trên được giải quyết giống như ví dụ sau đây.
Giả sử chúng ta có một đường dẫn file của windows như sau:

C:\Windows\system32\cmd.exe

Để viết đường dẫn trên trong python, chúng ta sẽ xem hai cách dưới đây:

# Cách 1 : dùng hai dấu gạch chéo ngược để biểu thị `\` 
path = 'C:\\Windows\\system32\\cmd.exe'

# Cách 2 : dùng chuỗi thô
rpath = r'C:\Windows\system32\cmd.exe'

# Hãy kiểm tra liệu hai chuỗi này có giống nhau không?
print(path == rpath)
#>> True

Bạn thấy đó, hai kết quả này hoàn toàn giống nhau. Nhưng thay vì viết nhiều lần dấu gạch chéo ngược \\ như ở cách 1, chúng ta chỉ cần khai báo đây là chuỗi thô bằng cách thêm r vào đầu đường dẫn là xong.

  • Chúng ta còn có một cách khác để viết đường dẫn windows trong python, đó là thay dấu gạch chéo ngược \ bằng dấu gạch chéo / như sau:
    path = 'C:/Windows/system32/cmd.exe'

Lưu ý khi dùng chuỗi thô để viêt đường dẫn folder windows trong python

Khi bạn muốn biểu diễn một đường dẫn folder window trong python, hãy hết sức chú ý, vì nếu bạn chuỗi bạn viết kết thúc bởi một số lượng lẻ dấu gạch chéo ngược \ thì sẽ xảy ra lỗi ngay. Ví dụ chúng ta có đường dẫn folder windows kết thúc bởi một dấu gạch chéo ngược \ như sau:

C:\Windows\system32\

Nếu bạn viết chuỗi thô với một dấu gạch chéo ngược \ khi kết thúc chuỗi? kết quả, lỗi EOL sẽ bị trả về như sau

rpath2 = r'C:\Windows\system32\'
  File "Main.py", line 1
rpath2 = r'C:\Windows\system32\'
^
SyntaxError: EOL while scanning string literal

Để khắc phục lỗi trên, bạn cần nhớ không được kết thúc chuỗi thô trong python bằng một dấu gạch chéo ngược, mà phải kết thúc bằng số chẵn dấu gạch chéo ngược \ khi viết đường dẫn folder windows trong python, giống như dưới đây:

rpath2 = r'C:\Windows\system32'   # kết thúc bởi 0 dấu `\\`
path2 = 'C:\\Windows\\system32\\' # kết thúc bởi 2 dấu `\\`
rpath2_2 = r'C:\Windows\system32' + '\\' # kết thúc bởi 2 dấu `\\`

Một số chú ý khi dùng chuỗi thô raw string trong python

Các ký tự đặc biệt tạo chuỗi thoát trong chuỗi thô sẽ hiển thị khi in ra màn hình

Điều hiển nhiên là trong chuỗi thô, các ký tự tạo chuỗi thoát như \n," sẽ được coi là ký tự bình thường, do đó khi dùng hàm print để in ra màn hình thì các ký tự này cũng sẽ được in luôn như vậy ra màn hình.
Vì thế bạn phải kiểm tra xem trong chuỗi thô của mình có ký tự đặc biệt hay chuỗi thoát nào không để xử lý, nếu không thì kết quả sẽ hiện ra ngớ ngẩn như ví dụ sau đây:

print(r"Em \"rất đẹp\"")

kết quả

Em \"rất đẹp\"

Hẳn là cô nàng mà bạn tỏ tình sẽ không muốn thấy một dòng chữ lủng củng với các ký tự vô nghĩa như trên phải không nào?

Phải kết thúc chuỗi thô trong python bằng một số chẵn dấu gạch chéo ngược \.

Giống như ví dụ về đường dẫn folder windows ở trên, bạn cần phải kết thúc chuỗi thô trong python bằng một số chẵn dấu gạch chéo ngược \. nếu kết thúc chuỗi thô bằng một số lẻ dấu gạch chéo ngược \ , lỗi EOF sẽ xảy ra . Ví dụ:

print(r"Kiyoshi 30 tuổi và rất đẹp trai \")

Ooop! Xảy ra lỗi rồi:

  File "Main.py", line 1
print(r"Kiyoshi 30 tuổi và rất đẹp trai \")
^
SyntaxError: EOL while scanning string literal

Thay vào đó, hãy viết lại bằng cách kết thúc chuỗi thô bằng một số chẵn dấu gạch chéo ngược \ như sau:

print(r"Kiyoshi 30 tuổi và rất đẹp trai ") 
# kết thúc bởi 0 dấu `\\`

print(r"Kiyoshi 30 tuổi và rất đẹp trai \\")
# kết thúc bởi 2 dấu `\\`

print(r"Kiyoshi 30 tuổi và rất đẹp trai" + "\\")
# kết thúc bởi 2 dấu `\\`

Tổng kết

Trên đây Kiyoshi đã hướng dẫn bạn cách sử dụng chuỗi thô raw string trong python rồi. Để nắm rõ nội dung bài học hơn, bạn hãy thực hành viết lại các ví dụ của ngày hôm nay nhé.

Và hãy cùng tìm hiểu những kiến thức sâu hơn về python trong các bài học tiếp theo.

HOME>> >>

Profile
きよしです!笑

Tác giả : Kiyoshi (Chis Thanh)

Kiyoshi là một cựu du học sinh tại Nhật Bản. Sau khi tốt nghiệp đại học Toyama năm 2017, Kiyoshi hiện đang làm BrSE tại Tokyo, Nhật Bản.