Chuỗi (string) là một trong những kiểu dữ liệu quan trọng và được sử dụng thường xuyên nhất trong Python. Khi làm việc với văn bản, hai thao tác nổi bật nhất chính là cắt chuỗi (slicing) và tách chuỗi (splitting). Đây là kỹ thuật nền tảng, giúp lập trình viên xử lý dữ liệu văn bản một cách linh hoạt và hiệu quả. Trong bài viết này, chúng ta sẽ tìm hiểu chi tiết cách sử dụng slicing và splitting trong Python, đi từ cơ bản đến nâng cao.
1. Khái niệm cắt và tách chuỗi
Cắt chuỗi (Slicing)
Cắt chuỗi là quá trình lấy một phần con của chuỗi gốc dựa trên vị trí chỉ số (index). Python cho phép truy cập nhanh chóng vào các ký tự riêng lẻ hoặc đoạn chuỗi con mà không cần viết nhiều vòng lặp.
Tách chuỗi (Splitting)
Tách chuỗi là quá trình chia chuỗi thành danh sách (list) các chuỗi nhỏ hơn dựa vào dấu phân cách. Đây là một kỹ thuật phổ biến khi xử lý dữ liệu dạng văn bản, như tách từ trong câu, tách cột dữ liệu CSV hoặc xử lý input từ người dùng.
2. Cắt chuỗi trong Python (String Slicing)
Cú pháp cơ bản:
# General syntax: string[start:end:step]
text = "PythonString"
# Slice from index 0 to 6 (excluding 6)
part1 = text[0:6] # Output: "Python"
# Slice from beginning to index 6
part2 = text[:6] # Output: "Python"
# Slice from index 6 to end
part3 = text[6:] # Output: "String"
# Slice with step
part4 = text[0:12:2] # Output: "PtoSrn"
- start: chỉ số bắt đầu (bao gồm).
- end: chỉ số kết thúc (không bao gồm).
- step: bước nhảy, cho phép bỏ qua ký tự theo quy luật.
Chỉ số âm (Negative Index)
Python hỗ trợ chỉ số âm, tính từ cuối chuỗi:
word = "HelloWorld"
print(word[-1]) # Output: "d" (last character)
print(word[-5:-1]) # Output: "Worl"
3. Các tình huống thực tế khi cắt chuỗi
Một số ứng dụng phổ biến của slicing:
3.1 Lấy ký tự đầu, cuối hoặc đoạn chuỗi bất kỳ
sentence = "DataScience"
print(sentence[0]) # "D"
print(sentence[-1]) # "e"
print(sentence[4:11]) # "Science"
3.2 Đảo ngược chuỗi
text = "Python"
reversed_text = text[::-1]
print(reversed_text) # "nohtyP"
3.3 Lấy phần mở rộng của file
filename = "report.pdf"
extension = filename[-3:]
print(extension) # "pdf"
3.4 Trích xuất ngày từ chuỗi
date_str = "2025-09-27"
day = date_str[-2:]
print(day) # "27"
4. Tách chuỗi trong Python (String Splitting)
Hàm split()
là công cụ chính để tách chuỗi.
4.1 Tách theo khoảng trắng
text = "Machine Learning with Python"
words = text.split()
print(words)
# Output: ["Machine", "Learning", "with", "Python"]
4.2 Tách theo ký tự tùy chọn
data = "apple,banana,orange"
fruits = data.split(",")
print(fruits)
# Output: ["apple", "banana", "orange"]
4.3 Giới hạn số lần tách
text = "one-two-three-four"
parts = text.split("-", 2)
print(parts)
# Output: ["one", "two", "three-four"]
5. Các phương thức liên quan đến tách chuỗi
5.1 rsplit()
Tách từ phải sang trái:
text = "a-b-c-d"
result = text.rsplit("-", 2)
print(result)
# Output: ["a-b", "c", "d"]
5.2 splitlines()
Tách chuỗi nhiều dòng:
paragraph = "Line1\nLine2\nLine3"
lines = paragraph.splitlines()
print(lines)
# Output: ["Line1", "Line2", "Line3"]
5.3 Ghép chuỗi lại bằng join()
words = ["I", "love", "Python"]
sentence = " ".join(words)
print(sentence) # "I love Python"
6. Ứng dụng thực tế của cắt & tách chuỗi
6.1 Phân tích dữ liệu CSV
record = "John,25,Engineer"
fields = record.split(",")
print(fields)
# ["John", "25", "Engineer"]
6.2 Xử lý họ tên người dùng
full_name = "Nguyen Van A"
parts = full_name.split()
first_name = parts[0]
last_name = parts[-1]
print(first_name, last_name) # "Nguyen A"
6.3 Chuẩn hóa dữ liệu văn bản
raw_text = " Python Programming "
clean_text = raw_text.strip().split()
print(clean_text)
# ["Python", "Programming"]
6.4 Tách và phân tích URL
url = "https://example.com/page?user=123"
protocol = url.split(":")[0]
domain = url.split("/")[2]
print(protocol, domain) # "https", "example.com"
7. Kỹ thuật nâng cao và lưu ý
7.1 partition()
và rpartition()
text = "key=value=extra"
print(text.partition("="))
# ("key", "=", "value=extra")
print(text.rpartition("="))
# ("key=value", "=", "extra")
7.2 Kết hợp slicing với splitting
data = "ID:12345-Name:Alice"
id_part = data.split("-")[0][3:]
print(id_part) # "12345"
7.3 Hiệu năng
- Khi nối chuỗi nhiều lần, nên dùng
"".join(list)
thay vì dùng+
. - Khi xử lý chuỗi rất lớn, cân nhắc dùng StringIO.
7.4 Lỗi thường gặp
- IndexError khi truy cập ngoài phạm vi.
- Kết quả rỗng nếu dấu phân cách không tồn tại.
8. Kết luận
Cắt và tách chuỗi nghe có vẻ đơn giản, nhưng thực ra lại là một kỹ năng cực kỳ quan trọng khi làm việc với Python. Trong bài viết này, mình và bạn đã cùng nhau tìm hiểu cách slicing để lấy chuỗi con, đảo ngược hay trích xuất dữ liệu, cùng với loạt phương thức hữu ích như split(), rsplit(), splitlines(), partition() và join().
Không chỉ dừng lại ở lý thuyết, chúng ta còn thấy chúng có thể ứng dụng ngay trong thực tế: từ việc xử lý file CSV, tách họ tên, cho đến phân tích URL. Khi đã nắm vững những kỹ thuật này, bạn sẽ thấy việc thao tác với văn bản trở nên dễ dàng hơn rất nhiều, đồng thời cũng mở ra con đường để chúng ta chạm tới những chủ đề “xịn” hơn như Regular Expressions (Regex).
9. Tài liệu tham khảo
- Python Software Foundation. Text Sequence Type — str. Python Documentation. Truy cập tại: https://docs.python.org/3/library/stdtypes.html#text-sequence-type-str
- Sweigart, A. (2015). Automate the Boring Stuff with Python. No Starch Press.
- Lutz, M. (2013). Learning Python (5th Edition). O’Reilly Media.