11 - Các phương thức chuỗi trong Python

#Giới thiệu về phương thức của kiểu dữ liệu chuỗi trong Python

Kiểu dữ liệu chuỗi của Python có khá nhiều các phương thức hỗ trợ.
Mình sẽ giới thiệu với các bạn các phương thức cơ bản thường được sử dụng. Để có thể có được đầy đủ những phương thức chuẩn, hãy ghé thăm tài liệu của Python https://docs.python.org/3/library/stdtypes.html#string-methods
Các phương thức này đều có giá trị trả về và không ảnh hưởng gì tới giá trị ban đầu. Tương tự như một số hàm mà các bạn đã biết: int, float, str

>>> a = '12'
>>> int(a)
12
>>> type(a)  # a vẫn thuộc lớp str
<class 'str'>

#Các phương thức biến đổi

##Phương thức capitalize

Cú pháp:

<chuỗi>.capitalize()

Trả về một chuỗi với kí tự đầu tiên được viết hoa và viết thường tất cả những kí tự còn lại.

>>> 'abC'.capitalize()
'Abc'
>>> ‘hello, World!’.capitalize()
'Hello, world!'
>>> '  abcXYZ'.capitalize()
'  abcxyz' 

##Phương thức upper

Cú pháp:

<chuỗi>.upper()

Trả về một chuỗi với tất cả các kí tự được chuyển thành các kí tự viết hoa

>>> 'abc'.upper()
'ABC'
>>> 'ABC xyz'.upper()
'ABC XYZ'
>>> ' xyz'.upper()
' XYZ'

##Phương thức lower

Cú pháp:

<chuỗi>.lower()

Trả về một chuỗi với tất cả các kí tự được chuyển thành các kí tự viết thường

>>> 'ABC xyz'.lower()
'abc xyz'
>>> 'abc'.lower()
'abc'
>>> ' xYz'.lower()
' xyz'

##Phương thức swapcase

Cú pháp:

<chuỗi>.swapcase()

Trả về một chuỗi với các kí tự viết hoa được chuyển thành viết thường, các kí tự viết thường được chuyển thành viết hoa

>>> 'abc XYZ'.swapcase()
'ABC xyz'
>>> 'AbC xYz'.swapcase()
'aBc XyZ'

##Phương thức title

Cú pháp:

<chuỗi>.title()

Trả về một chuỗi với định dạng tiêu đề, có nghĩa là các từ sẽ được viết hoa chữ cái đầu tiên, còn lại là viết thường

>>> 'japanese anti virus'.title()
'Japanese Anti Virus'
>>> 'ABC XYZ MNP'.title()
'Abc Xyz Mnp'

#Các phương thức định dạng

##Phương thức center

Cú pháp:

<chuỗi>.center(width [,fillchar])

Trả về một chuỗi được căn giữa với chiều rộng width. Nếu fillchar là None (không được nhập vào) thì sẽ dùng kí tự khoảng trắng để căn, không thì sẽ căn bằng kí tự fillchar.
Một điều nữa là kí tự fillchar là một chuỗi có độ dài là 1.

>>> 'abc'.center(12)
'    abc     '
>>> 'abc'.center(12, '*')
'****abc*****'
>>> 'abc'.center(12, '*a')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: The fill character must be exactly one character long
>>> 'abc'.center(12, '')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: The fill character must be exactly one character long

##Phương thức rjust

Cú pháp:

<chuỗi>.rjust(width [,fillchar])

Cách hoạt động tương tự như phương thức center, có điều là căn lề phải

>>> 'abc'.rjust(12)
'         abc'
>>> 'abc'.rjust(12, '*')
'*********abc'

##Phương thức ljust

Cú pháp:

<chuỗi>.ljust(width [,fillchar])

Cách hoạt động tương tự phương thức rjust, nhưng căn lề phải

>>> 'abc'.ljust(12)
'abc         '
>>> 'abc'.ljust(12, '*')
'abc*********'

#Các phương thức xử lí

##Phương thức encode

Cú pháp:

<chuỗi>.encode(encoding='utf-8', errors='strict')

Đây là phương thức dùng để encode một chuỗi với phương thức mã hóa mặc định là utf-8. Còn về errors mặc định sẽ là strict có nghĩa là sẽ có thông báo lỗi hiện lên nếu có vấn đề xuất hiện trong quá trình encode chuỗi. Một số giá trị ngoài strict là ignore, replace, xmlcharrefreplace. Vì phần này là phần nâng cao, mình xin phép không đi sâu.
Kết quả trả về thuộc lớp 'bytes'

>>> 'ố ồ'.encode()
b'\xe1\xbb\x91 \xe1\xbb\x93'

##Phương thức join

Cú pháp:

<kí tự nối>.join(<iterable>)

Trả về một chuỗi bằng cách nối các phần tử trong iterable bằng kí tự nối. Một iterable có thể là một tuple, list,… hoặc là một iterator (mình sẽ giải thích khái niệm này ở những topic sau).
Một điểm lưu ý, các phần tử trong iterable buộc phải thuộc lớp str

>>> ' '.join(['1', '2', '3']) # iterable ở đây là list ['1', '2', '3']
'1 2 3'
>>> ' '.join(('1', '2', '3')) # iterable ở đây là tuple ('1', '2', '3')
'1 2 3'
>>> ' '.join([1, 2, 3]) # phần tử trong list không phải là chuỗi
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: sequence item 0: expected str instance, int found

##Phương thức replace

Cú pháp:

<chuỗi>.replace(old, new [,count])

Trả về một chuỗi với các chuỗi old nằm trong chuỗi ban đầu được thay thế bằng chuỗi new. Nếu count khác None (có nghĩa là ta cho thêm count) thì ta sẽ thay thế old bằng new với số lượng count từ trái qua phải.
Nếu chuỗi old không nằm trong chuỗi ban đầu hoặc count là 0 thì sẽ trả về một chuỗi giống với chuỗi ban đầu

>>> 'abc xyz abc mnp'.replace('abc', 'aaa')
'aaa xyz aaa mnp'
>>> 'abc xyz abc mnp'.replace('a', 'AA')
'AAbc xyz AAbc mnp'
>>> 'abc xyz abc mnp'.replace('abcd', 'AA')
'abc xyz abc mnp'
>>> 'abc xyz abc mnp'.replace('abc', 'AA', 1)
'AA xyz abc mnp'
>>> 'abc xyz abc mnp'.replace('abc', 'BB', 0)
'abc xyz abc mnp'

##Phương thức strip

Cú pháp:

<chuỗi>.strip([chars])

Trả về một chuỗi với phần đầu và phần đuôi của chuỗi được bỏ đi các kí tự chars. Nếu chars bị bỏ trống thì mặc định các kí tự bị bỏ đi là dấu khoảng trắng và một số escape sequence. Một số escape sequence ngoại lệ như \a sẽ được encode utf-8.

>>> '  Yui   '.strip()
'Yui'
>>> '%%%%Yui%%%'.strip('%')
'Yui'
>>> 'cababYuibaaaca'.strip('abc')
'Yui'
>>> '\t\n\aYui\a\a\n\v'.strip() # các \a biến thành \x07
'\x07Yui\x07\x07'
>>> print('\x07Yui\x07\x07')  # nhưng khi dùng print vẫn có kết quả tương tự
Yui
>>>

##Phương thức rstrip

Cú pháp:

<chuỗi>.rstrip()

Cách hoạt động hoàn toàn như phương thức strip, nhưng khác là chỉ bỏ đi ở phần đuôi (từ phải sang trái)

>>> '   Yui   '.rstrip()
'   Yui'
>>> '%%%%Yui%%%'.rstrip('%')
'%%%%Yui'
>>> 'cababYuibaaaca'.rstrip('abc')
'cababYui'

##Phương thức lstrip

Cú pháp:

<chuỗi>.lstrip()

Cách hoạt động tương tự phương thức rstrip, khác ở chỗ rstrip lo phần đuôi, còn lstrip lo phần đầu (từ trái sang phải)

>>> '   Yui   '.lstrip()
'Yui   '
>>> '%%%%Yui%%%'.lstrip('%')
'Yui%%%'
>>> 'cababYuibaaaca'.lstrip('abc')
'Yuibaaaca'

Link video của HowKteam


#NEXT
12 - CÁC PHƯƠNG THỨC CHUỖI TRONG PYTHON (PHẦN 2)
#PREVIOUS
10 - ĐỊNH DẠNG CHUỖI TRONG PYTHON (PHẦN 3)

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?