Các thư viện xử lý string trong python

Ngôn ngữ lập trình Python hỗ trợ cho chúng ta khá nhiều hàm để xử lý hay thao tác với chuỗi.

Xin được nhắc lại, chuỗi trong Python phải được đặt trong cặp nháy kép ("") hoặc cặp nháy đơn ('').

Bài học này sẽ trình bày một số hàm thường phổ biến sử dụng trong quá trình xử lý và thao tác với chuỗi.

1. capitalize()

Hàm này có tác dụng in hoa chữ cái đầu tiên của chuỗi hiện thời (là chuỗi cần thao tác).

Ví dụ:

str = "v1Study.com"

print(str.capitalize())

Kết quả:

V1Study.com

2. center()

Hàm này có tác dụng trả về chuỗi mới chứa nội dung chuỗi hiện thời, trong đó chuỗi hiện thời được hiển thị nằm giữa chuỗi mới.

Cú pháp:

Trong đó:

  • str là chuỗi hiện thời (chuỗi cần thao tác).
  • len là số lượng ký tự của chuỗi mới, nếu len nhỏ hơn hoặc bằng độ dài chuỗi thì hàm center() sẽ trả về chuỗi cũ.
  • char là ký tự sẽ hiển thị ở 2 bên chuỗi cũ, nếu ta không sử dụng đối số này thì ký tự mặc định là dấu cách (space).

Ví dụ không sử dụng đối số char:

str = "v1study.com"
print(str.center(10))

Kết quả:

v1study.com

str = "v1study.com"
print(str.center(20))

Kết quả:

    v1study.com     

Ví dụ có sử dụng đối số char:

str = "v1study.com"

print(str.center(10, '*'))

Kết quả:

v1study.com

str = "v1study.com"

print(str.center(20, '*'))

Kết quả:

****v1study.com*****

3. count()

Hàm này dùng để tìm và đếm xem trong chuỗi hiện thời có bao nhiêu chuỗi cần tìm. Hàm trả về số lượng chuỗi tìm thấy.

Cú pháp:

str.count(str1, [start], [end])

Trong đó:

  • str1 là chuỗi cần tìm kiếm và đếm trong chuỗi hiện thời str.
  • start là vị trí bắt đầu tìm trong chuỗi hiện thời. Nếu không sử dụng thì mặc định strart = 1 (ký tự đầu tiên của chuỗi hiện thời).
  • end là vị trí kết thúc tìm trong chuỗi hiện thời. Nếu không sử dụng thì mặc định end = len() của chuỗi hiện thời.

Ví dụ:

str = "Lap trinh Python"

print(str.count('t')) #tìm chuỗi t trong chuỗi hiện thời

Kết quả:

2

string = "Lap trinh Python"

# tìm chuỗi t trong chuỗi hiện thời bắt đầu từ vị trí thứ 6
print(string.count('t', 6))

Kết quả:

1

string = "Lap trinh Python"

# tìm chuỗi t trong chuỗi hiện thời bắt đầu từ vị trí thứ 6
# và kết thúc ở vị trí thứ 12 
print(string.count('t', 6, 12))

Kết quả:

0

4. encode()

Hàm này có tác dụng mã hóa (encode) chuỗi hiện thời.

Cú pháp:

str.encode([encoding], [error])

Trong đó:

  • encoding là loại mã hóa của chuỗi hiện thời str. Nếu không sử dụng thì mặc định sẽ là utf-8. Có một số loại mã hóa như utf-8, utf-16, utf-32, ...
  • error là chế độ báo lỗi nếu có khi mã hóa. Python hỗ trợ 6 dạng error như sau:
    • strict - Chế độ nghiêm ngặt, nó sẽ hiển thị lỗi dưới dạng một ngoại lệ UnicodeDecodeError. Nếu không sử dụng mode thì strict sẽ là chế độ mặc định.
    • ignore - bỏ qua tất cả các lỗi nếu có.
    • replace - nó sẽ thay thế lỗi bằng dấu ?.
    • xmlcharrefreplace - chèn tham chiếu XML.
    • backslashreplace - Chèn chuỗi \uNNNN.
    • namereplace - Chèn chuỗi \N{...}.

Ví dụ:

str = "v1study.com"

print(str.encode())

Kết quả:

b'v1study.com'

str = "v1study.com"

# dùng loại mã hóa utf-16
print(str.encode('utf-16'))

Kết quả:

b'\xff\xfev\x001\x00s\x00t\x00u\x00d\x00y\x00.\x00c\x00o\x00m\x00'

5. decode()

Hàm này có tác dụng ngược với hàm encode(), cụ thể decode() dùng để giải mã (decode) chuỗi hiện thời.

Ví dụ:

str = b'v1study.com'

# dùng loại giải mã là utf-8
print(str.decode('utf-8'))

Kết quả:

v1study.com

str = b'\xff\xfev\x001\x00s\x00t\x00u\x00d\x00y\x00.\x00c\x00o\x00m\x00'

# dùng loại giải mã là utf-16
print(str.decode('utf-16'))

Kết quả:

v1study.com

6. endswith()

Hàm này có tác dụng kiểm tra xem chuỗi hoặc khoảng chuỗi có được kết thúc bằng ký tự nào đó hay không. Nó sẽ trả về True nếu đúng và False nếu sai.

Cú pháp:

string.endswith(str, start, end)

Trong đó:

  • str là chuỗi các bạn cần xác thực xem có phải chuỗi kết thúc không.
  • strart là vị trí bắt đầu chuỗi cần so sánh. Mặc định thì start = 1.
  • end là vị trí kết thúc chuỗi cần so sánh. Mặc định thì end = len() của chuỗi string hiện thời.

Ví dụ:

str = "V1Study"

print(str.endswith('y'))

Kết quả:

True

str = "V1Study"

print(str.endswith('S', 1, 3))

Kết quả:

True

7. expandtabs()

Hàm này có tác dụng tìm kiếm và thay thế tab (\t) bằng các ký tự khoảng trắng (space).

Cú Pháp:

str.expandtabs(number)

Trong đó: number là số lượng khoảng trắng mà bạn muốn thay thế cho một \t. Nếu không được sử dụng thì mặc định number = 8 hoặc bằng số khoảng trắng khi ta cấu hình tab. Nếu number<= số khoảng trắng ứng với 1 \t thì \t sẽ được thay thế bằng 1 dấu cách; nếu number> số khoảng trắng ứng với \t thì \t sẽ được thay thế bằng (number - số khoảng trắng ứng với \t) dấu cách.

Trong ví dụ dưới đây thì \t đang được cấu hình ứng với 2 dấu cách.

Ví dụ:

str = "V1Study:\tLập trình Python"

print(str.expandtabs(4))

Kết quả:

V1Study:    Lập trình Python

8. find()

Hàm này có nhiệm vụ tìm kiếm một chuỗi trong chuỗi hiện thời. find() sẽ trả về vị trí theo chỉ số bắt đầu của chuỗi tìm được trong chuỗi nếu tìm thấy và trả về -1 nếu không tìm thấy.

Cú pháp:

str.find(sub, start, end)

Trong đó:

  • sub là chuỗi cần tìm các bạn cần xác thực xem có phải chuỗi kết thúc không.
  • start là vị trí theo chỉ số bắt đầu chuỗi cần so sánh. Nếu không dùng đến thì mặc định start = 0.
  • end là vị trí kết thúc chuỗi cần so sánh. Nếu không dùng đến thì mặc định end = len() của chuỗi hiện thời str.

Ví dụ:

str = "V1Study"

print(str.find("St"))

Kết quả:

2

str = "V1Study"

print(str.find("St", 3))

Kết quả:

-1

str = "V1Study"

print(str.find("St", 0, 4))

Kết quả:

2

9. index()

Hàm này tương tự như hàm find() chỉ khác duy nhất là nếu như không tìm thấy thì hàm này sẽ trả về ngoại lệ (exception).

Ví dụ:

string = "v1study.com"

print(string.index('dangtranlong'))

Kết quả:

ValueError: substring not found

10. isalnum()

Hàm isalnum() có nhiệm vụ kiểm tra xem chuỗi có chứa ký tự nào không phải là chữ hay số không, nếu chuỗi có chứa ký tự không phải là chữ và số thì hàm sẽ trả về False, ngược lại hàm sẽ trả về True.

Ví dụ:

string = "V1Study"  # chuỗi này chỉ chứa chữ và số

print(string.isalnum())

Kết quả:

True

string = "v1study.com"  # chuỗi này có chứa ký tự .

print(string.isalnum())

Kết quả:

False

string = "Lập trình Python"  # chuỗi này có chứa ký tự space

print(string.isalnum())

Kết quả:

False

string = "LậptrìnhPython"  # chuỗi này chỉ chứa chữ

print(string.isalnum())

Kết quả:

False

11. isalpha()

Hàm isalpha() có nhiệm vụ kiểm tra xem chuỗi hiện thời có chứa ký tự nào không phải là chữ không, nếu chuỗi có chứa ký tự không phải là chữ thì hàm sẽ trả về False, ngược lại hàm sẽ trả về True.

Ví dụ:

string = "V1Study"

print(string.isalpha())

Kết quả:

False

string = "Talent"

print(string.isalpha())

Kết quả:

True

12. isdigit()

Hàm isdigit() có nhiệm vụ kiểm tra xem chuỗi hiện thời có chứa ký tự nào không phải là số không, nếu chuỗi có chứa ký tự không phải là số thì hàm sẽ trả về False, ngược lại hàm sẽ trả về True.

Ví dụ:

string = "V1Study"

print(string.isdigit())

Kết quả:

False

string = "0123456789"

print(string.isdigit())

Kết quả:

True

13 islower()

Hàm này có nhiệm vụ kiểm tra xem chuỗi hiện thời có chữ nào in hoa không, nếu có sẽ trả về False và ngược lại thì trả về True.

Ví dụ:

string = "v1study"

print(string.islower())

Kết quả:

True

string = "V1Study"

print(string.islower())

Kết quả:

False

14. isupper()

Ngược với hàm islower(), hàm isupper() sẽ kiểm tra xem chuỗi có chứa chữ nào là chữ in thường không, nếu có sẽ trả về False và ngược lại thì trả về True.

Ví dụ:

string = "V1Study"

print(string.isupper())

Kết quả:

False

string = "V1STUDY"

print(string.isupper())

Kết quả:

True

15. isnumeric()

Hàm isnumeric() có nhiệm vụ kiểm tra xem chuỗi hiện thời có chứa ký tự nào không phải là số không, nếu chuỗi có chứa ký tự không phải là số thì hàm sẽ trả về False, ngược lại hàm sẽ trả về True.

Ví dụ:

string = "v1study.com"

print(string.isnumeric())

Kết quả:

False

string = "0123456789"

print(string.isnumeric())

Kết quả:

True

16. isspace()

Hàm isspace() có nhiệm vụ kiểm tra xem chuỗi hiện thời có chứa ký tự nào không phải là dấu cách (space) không, nếu chuỗi có chứa ký tự không phải là space thì hàm sẽ trả về False, ngược lại hàm sẽ trả về True.

Ví dụ:

string = "   "

print(string.isspace())

Kết quả:

True

string = " V "

print(string.isspace())

Kết quả:

False

17 istitle()

Hàm này có tác dụng kiểm tra xem chuỗi có phải là dạng title hay không, chuỗi có dạng title là chuỗi trong đó các chữ cái đầu của mỗi từ đều được in hoa. Nó sẽ trả về True nếu đúng và ngược lại False nếu sai.

Ví dụ:

string = "V1Study"

print(string.istitle())

Kết quả:

True

string = "v1Study"

print(string.istitle())

False

18. join(sub)

Hàm join() có nhiệm vụ nối các thành phần của sub lại với nhau bằng chuỗi hiện thời.

Cú pháp:

str.join(sub)

Trong đó: sub có thể là stringlist, ... mà bạn cần join lại với nhau. 

Ví dụ:

str = "-"
sub = "V1Study"
print(str.join(sub))

Kết quả:

V-1-S-t-u-d-y

str = "-"
sub = ["V1", "Study"]
print(str.join(sub))

Kết quả:

V1-Study

str = "-"
sub = ("Lập", "trình", "Python")
print(str.join(sub))

Kết quả:

Lập-trình-Python

19. len()

Hàm này có tác dụng trả về độ dài của chuỗi hiện thời.

Ví dụ:

str = "V1Study"

print(len(str))

Kết quả:

7

20. ljust()

Cú pháp:

str.ljust(width, fillchar)

Trong đó:

  • width là độ rộng trường để đặt chuỗi hiện thời.
  • char là ký tự sẽ bù vào chuỗi mới nếu chuỗi cũ không đủ length. Mặc định thì char = khoảng trắng.

Tác dụng:

Hàm ljust() có tác dụng trả về một chuỗi mới, trong đó nếu width<= độ dài chuỗi hiện thời thì hàm sẽ trả về chuỗi hiện thời, ngược lại thì hàm sẽ trả về chuỗi mới gồm chuỗi hiện thời nằm bên trái và nằm bên phải là các ký tự fillchar.

Ví dụ:

str = "V1Study"

print(str.ljust(20, '*'))

Kết quả:

V1Study*************

21. rjust()

Hàm rjust() có tác dụng ngược với hàm ljust(), cụ thể là chuỗi hiện thời sẽ nằm bên phải chuỗi mới, phần bên trái sẽ là các ký tự fillchar.

Ví dụ:

str = "V1Study"

print(str.rjust(20, '*'))

Kết quả:

*************V1Study

22. lower()

Hàm này có tác dụng chuyển chuyển tất cả các ký tự in hoa của chuỗi hiện thời thành in thường và trả về chuỗi mới tương ứng.

Ví dụ:

str = "V1Study"

print(str.lower())

Kết quả:

v1study

23. upper()

Hàm này có tác dụng ngược với hàm lower.

Ví dụ:

str = "V1Study"

print(str.upper())

Kết quả:

V1STUDY

24. lstrip(char)

Hàm này có tác dụng loại bỏ đi các ký tự char ở phía đầu của chuỗi. Mặc định thì char sẽ là ký tự trắng (space).

Ví dụ:

str = "   V1Study"

print(str.lstrip())

Kết quả:

V1Study

str = "***V1Study***"

print(str.lstrip('*'))

Kết quả:

V1Study***

25. rstrip(char)

Ngược với lstrip(), hàm rstrip() sẽ cắt các ký tự char ở phần cuối của chuỗi.

Ví dụ:

str = "V1Study   "

print("\"" + str.rstrip() + "\"")

Kết quả:

"V1Study"

str = "***V1Study***"

print("\"" + str.rstrip('*') + "\"")

Kết quả:

"***V1Study"

26. strip(char)

Hàm này là sự kết hợp của lstrip() và rstrip(). Nó sẽ lại bỏ các ký tự char ở cả đầu và cuối của chuỗi.

Ví dụ:

str = "***V1Study***"

print("\"" + str.strip('*') + "\"")

Kết quả:

"V1Study"

27. rfind()

Tương tự như hàm find(), nhưng hàm này nó sẽ trả về vị trí theo chỉ số của chuỗi cuối cùng tìm được trong chuỗi. Cú pháp sử dụng tương tự hàm find().

Ví dụ:

str = "Programming"

print(str.rfind("r"))

Kết quả:

4

28. rindex()

Tương tự như hàm index(), nhưng hàm rindex() trả về vị trí theo chỉ số của chuỗi cuối cùng tìm được trong chuỗi. Cú pháp sử dụng tương tự hàm index().

Ví dụ:

str = "Programming"

print(str.rfind("r"))

Kết quả:

4

29. replace()

Hàm này có tác dụng tìm kiếm và thay thế chuỗi tìm được bằng chuỗi mới.

Cú Pháp:

str.replace(old, new, count)

Trong đó:

  • old là chuỗi mà ta cần tìm kiếm trong string.
  • new là chuỗi mà ta cần thay thế cho chuỗi old tìm được.
  • count là số lượng từ muốn thay thế.

Ví dụ:

str = "abacadaeaf"

print(str.replace('a', 'A'))

Kết quả:

AbAcAdAeAf

str = "abacadaeaf"

print(str.replace('a', 'A', 3))

Kết quả:

AbAcAdaeaf

30. max()

Hàm này trả về ký tự có vị trí lớn nhất trong bảng mã ASCII so với các ký tự khác của chuỗi.

Ví dụ:

str = "v1study.com"

print(max(str))

Kết quả:

y

31. min()

Hàm này ngược với hàm max(), cụ thể là hàm trả về ký tự có vị trí nhỏ nhất trong bảng mã ASCII so với các ký tự khác của chuỗi.

Ví dụ:

str = "v1study.com"

print(max(str))

Kết quả:

.

32. title()

Hàm này có tác dụng chuyển đổi chuỗi sang dạng chuẩn title.

Ví dụ:

str = "dang tran long"

print(str.title())

Kết quả:

Dang Tran Long

33. swapcase()

Hàm này có tác dụng chuyển đổi các ký tự của chuỗi sang dạng nghịch đảo của nó, cụ thể là ký tự in thường thành in hoa và ký tự in hoa thành ký tự in thường.

Ví dụ:

str = "V1Study"

print(str.swapcase())

Kết quả:

v1sTUDY

str = "v1study.com"

print(str.swapcase())

Kết quả:

V1STUDY.COM

34. zfill()

Hàm này có tác dụng như hàm ljust(), tuy nhiên chỉ thêm các ký tự '0' (zero) vào phía trước chuỗi hiện thời.

Ví dụ:

str = "v1study"

print(str.zfill(20))

Kết quả:

0000000000000v1study

35. isdecimal()

Hàm này có tác dụng gần tương tự như hàm isdigit().

Ví dụ:

str = "123.456"

print(str.isdecimal())

Kết quả:

False

str = "123456"

print(str.isdecimal())

Kết quả:

True

36. split(sep)

Hàm này có tác dụng tác chuỗi thành một list bằng chuỗi sep.

Cú pháp:

str.split(sep, maxsplit)

Trong đó:

  • sep là chuỗi dùng để tách chuỗi hiện thời. Mặc định thì sep là chuỗi có 1 dấu cách.
  • maxsplit là số lượng chuỗi tối đa muốn tách.

Ví dụ:

str = "axbxcxdxexf"

print(str.split('x'))

Kết quả:

['a', 'b', 'c', 'd', 'e', 'f']

str = "axbxcxdxexf"

print(str.split('x', 3))

Kết quả:

['a', 'b', 'c', 'dxexf']

37. splitlines()

Hàm này sẽ tách chuỗi thành một mảng bằng các ký tự \n. Nếu đối số của hàm là False hoặc 0 thì các chuỗi mới sẽ không chứa \n (bỏ đi \n), còn nếu đối số là True hoặc một số nguyên khác 0 thì các chuỗi mới sẽ vẫn chứa \n.

Ví dụ:

str = "Dang\nTran\nLong"

print(str.splitlines(False))

Kết quả:

['Dang', 'Tran', 'Long']

str = "Dang\nTran\nLong"

print(str.splitlines(True))

Kết quả:

['Dang\n', 'Tran\n', 'Long']

38. startswith()

Hàm này có tác dụng kiểm tra xem chuỗi hoặc khoảng chuỗi có được bắt đầu bằng ký tự nào đó hay không. Nó sẽ trả về True nếu đúng và False nếu sai.

Cú pháp:

str.startswith(prefix, start, end)

Trong đó:

  • prefix là chuỗi hoặc tuple ta cần kiểm tra xem có phải là chuỗi bắt đầu trong chuỗi hiện thời không.
  • strart là vị trí chỉ mục bắt đầu chuỗi cần so sánh. Mặc định thì start = 0.
  • end là vị trí chỉ mục kết thúc chuỗi cần so sánh. Mặc định thì end = len(str).

Ví dụ:

str = "V1Study"

print(str.startswith('V1'))

Kết quả:

True

str = "V1Study"

print(str.startswith('St', 2))

Kết quả:

True

str = "V1Study"

print(str.startswith('St', 2, 3))

Kết quả:

False

39. maketrans()

Hàm này có nhiệm vụ "dịch" một ký tự sang một chuỗi tương ứng, hàm chấp nhận 2 đối số là 2 chuỗi có độ dài bằng nhau (khi đó hàm sẽ trả về một từ điển với các key là các ký tự tương ứng được lấy của chuỗi 1 và các value là các giá trị tương ứng được lấy của chuỗi 2), hoặc chấp nhận 1 đối số là 1 dictionary trong đó key của dictionary phải là 1 ký tự.

Ví dụ:

inp = "abcdefghijklmnopqrstuxyz"
out = "ABCDEFGHIJKLMNOPQRSTUXYZ"
str = "Dang Tran Long";

result = str.maketrans(inp, out)
print(result)

Kết quả:

{97: 65, 98: 66, 99: 67, 100: 68, 101: 69, 102: 70, 103: 71, 104: 72, 105: 73, 106: 74, 107: 75, 108: 76, 109: 77, 110: 78, 111: 79, 112: 80, 113: 81, 114: 82, 115: 83, 116: 84, 117: 85, 120: 88, 121: 89, 122: 90}

dict = {"D": "Dang", "T": "Tran", "L": "Long"}
str = "Dang Tran Long";

result = str.maketrans(dict)
print(result)

Kết quả:

{68: 'Dang', 84: 'Tran', 76: 'Long'}

40. translate()

Hàm này có tác dụng thực thi việc dịch chuỗi, translate() thường dùng kết hợp với hàm makestrans().

Ví dụ:

inp = "abcdefghijklmnopqrstuxyz"
out = "ABCDEFGHIJKLMNOPQRSTUXYZ"

str = "Dang Tran Long";

result = str.maketrans(inp, out)

print(str.translate(result))

Kết quả:

DANG TRAN LONG

dict = {"V": "V1", "S": "Study"}

str = "VS"

result = str.maketrans(dict)

print(str.translate(result))

Kết quả:

V1Study