Trang chủHướng dẫnCách xóa khoảng trắng trong Python đơn giản
Polygon

Cách xóa khoảng trắng trong Python đơn giản

CyStack blog 12 phút để đọc
CyStack blog29/08/2025
Locker Avatar

Chris Pham

Technical Writer

Locker logo social
Reading Time: 12 minutes

Trong hướng dẫn này, bạn sẽ học các phương pháp khác nhau để xóa khoảng trắng trong Python. Đây là một tác vụ phổ biến trong lập trình Python, đặc biệt khi làm việc với dữ liệu nhập từ người dùng, xử lý dữ liệu hoặc xử lý văn bản.

Cách xóa khoảng trắng trong Python đơn giản

Các chuỗi thường chứa những khoảng trắng không mong muốn, có thể dẫn đến lỗi trong quá trình xử lý, xác thực và so sánh dữ liệu. Xử lý đúng cách các ký tự này đảm bảo tính nhất quán và toàn vẹn của dữ liệu.

Quá trình này bao gồm việc loại bỏ nhiều loại ký tự khoảng trắng khác nhau, không chỉ bao gồm khoảng trắng tiêu chuẩn (‘ ‘) mà còn cả tab (\t), xuống dòng (\n) và trở về đầu dòng (\r). Thông thường, bạn cũng có thể cần xử lý nhiều khoảng trắng liên tiếp giữa các từ hoặc các khoảng trắng ở đầu và cuối của toàn bộ chuỗi.

Trong các tình huống thực tế, việc loại bỏ khoảng trắng là cần thiết cho:

  • Làm sạch đầu vào của người dùng: Loại bỏ các khoảng trắng thừa từ tên người dùng, mật khẩu hoặc các trường biểu mẫu trước khi lưu chúng vào cơ sở dữ liệu.
  • Phân tích cú pháp tệp dữ liệu: Loại bỏ khoảng trắng và ký tự xuống dòng khỏi dữ liệu được đọc từ các tệp CSV, TXT hoặc JSON để đảm bảo việc phân tích cú pháp chính xác.
  • So sánh chuỗi: Đảm bảo rằng hai chuỗi, như ‘hello world’ và ‘ hello world ‘, được coi là bằng nhau sau khi chuẩn hóa.

Điều quan trọng cần nhớ là các chuỗi Python là bất biến, nghĩa là giá trị của chúng không thể thay đổi sau khi được tạo. Do đó, bất kỳ phương thức nào thao tác với một chuỗi sẽ trả về một chuỗi mới với các sửa đổi mong muốn.

Hướng dẫn này sẽ đề cập đến các kỹ thuật khác nhau, bao gồm các phương thức chuỗi tích hợp và biểu thức chính quy, để loại bỏ khoảng trắng khỏi chuỗi của bạn một cách hiệu quả.

Các ví dụ trong hướng dẫn này sử dụng giao diện điều khiển tương tác Python trong command line để minh họa các phương thức khác nhau loại bỏ khoảng trắng. Các ví dụ sử dụng chuỗi sau:

s = '  Hello  World   From DigitalOcean \\t\\n\\r\\tHi There  '

Kết quả là:

Output
  Hello  World   From DigitalOcean
 Hi There

Chuỗi này có các loại khoảng trắng và ký tự xuống dòng khác nhau, chẳng hạn như khoảng trắng (‘ ‘), tab (\t), xuống dòng (\n) và trở về đầu dòng (\r).

Những điểm chính

  • Sử dụng phương thức strip() và các biến thể của nó là lstrip()rstrip() để loại bỏ hiệu quả các khoảng trắng chỉ ở đầu hoặc cuối của một chuỗi.
  • Kết hợp các phương thức join()split() để chuẩn hóa một chuỗi bằng cách gộp nhiều loại ký tự khoảng trắng khác nhau thành một khoảng trắng duy nhất giữa các từ.
  • Để đạt hiệu suất nhanh nhất khi loại bỏ tất cả các loại ký tự khoảng trắng, hãy sử dụng phương thức translate() với hằng số string.whitespace.
  • Dành biểu thức chính quy với re.sub() cho việc loại bỏ khoảng trắng phức tạp, dựa trên mẫu, mà các phương thức chuỗi đơn giản hơn, nhanh hơn không thể thực hiện được.
  • Hãy nhớ rằng các chuỗi Python là bất biến, nghĩa là mỗi phương thức loại bỏ sẽ trả về một chuỗi mới, đã được sửa đổi, thay vì thay đổi chuỗi gốc.

Loại bỏ khoảng trắng ở đầu và cuối bằng phương thức strip()

Phương thức strip() của chuỗi Python loại bỏ các ký tự ở đầu và cuối của một chuỗi. Ký tự mặc định để loại bỏ là khoảng trắng.

Khai báo biến chuỗi:

s = '  Hello  World \\t\\n\\r\\tHi There  '

Sử dụng phương thức strip() để loại bỏ khoảng trắng ở đầu và cuối:

s.strip()

Đầu ra là:

Output
'Hello World \\t\\n\\r\\tHi There'

Nếu bạn muốn chỉ loại bỏ các khoảng trắng ở đầu hoặc cuối, bạn có thể sử dụng các phương thức lstrip()rstrip().

Xóa tất cả khoảng trắng bằng phương thức replace()

Bạn có thể sử dụng phương thức replace() để loại bỏ tất cả các ký tự khoảng trắng khỏi chuỗi, bao gồm cả khoảng trắng giữa các từ.

Khai báo biến chuỗi:

s = '  Hello  World   From DigitalOcean \\t\\n\\r\\tHi There  '

Sử dụng phương thức replace() để thay thế khoảng trắng bằng một chuỗi rỗng:

s.replace(" ", "")

Đầu ra là:

Output
'HelloWorldHiThere'

Lưu ý rằng phương thức này chỉ loại bỏ ký tự khoảng trắng tiêu chuẩn (‘ ‘) và sẽ không loại bỏ các loại khoảng trắng khác như tab (\t) hoặc xuống dòng (\n).

Loại bỏ các khoảng trắng trùng lặp và ký tự xuống dòng bằng phương thức join()split()

Bạn có thể loại bỏ tất cả các khoảng trắng và ký tự xuống dòng trùng lặp bằng cách sử dụng phương thức join() với phương thức split(). Trong ví dụ này, phương thức split() chia chuỗi thành một list, sử dụng ký tự phân tách mặc định là bất kỳ ký tự khoảng trắng nào. Sau đó, phương thức join() nối danh sách đó lại thành một chuỗi duy nhất với một khoảng trắng (” “) giữa mỗi từ.

Khai báo biến chuỗi:

s = '  Hello  World    \\t\\n\\r\\tHi There  '

Sử dụng kết hợp các phương thức join()split() để loại bỏ các khoảng trắng và ký tự xuống dòng trùng lặp:

" ".join(s.split())

Đầu ra là:

Output
'Hello World Hi There'

Loại bỏ tất cả khoảng trắng và ký tự xuống dòng bằng phương thức translate()

Bạn có thể loại bỏ tất cả các ký tự khoảng trắng và xuống dòng bằng cách sử dụng phương thức translate(). Phương thức translate() thay thế các ký tự được chỉ định bằng các ký tự được định nghĩa trong một dictionary hoặc bảng ánh xạ.

Ví dụ sau sử dụng một từ điển tùy chỉnh với hằng số chuỗi string.whitespace, chứa tất cả các ký tự khoảng trắng. Từ điển tùy chỉnh {ord(c): None for c in string.whitespace} sẽ thay thế tất cả các ký tự trong string.whitespace bằng None. Nhập module string để bạn có thể sử dụng string.whitespace:

import string

Khai báo biến chuỗi:

s = '  Hello  World   \\t\\n\\r\\tHi There  '

Sử dụng phương thức translate() để loại bỏ tất cả các ký tự khoảng trắng:

s.translate({ord(c): None for c in string.whitespace})

Đầu ra là:

Output
'HelloWorldHiThere'

Loại bỏ các ký tự khoảng trắng bằng biểu thức chính quy (Regex)

Bạn cũng có thể sử dụng biểu thức chính quy để khớp (match) các ký tự khoảng trắng và loại bỏ chúng bằng cách sử dụng hàm re.sub().

Ví dụ này sử dụng tệp sau, regexspaces.py, để trình bày một số cách bạn có thể sử dụng biểu thức chính quy để loại bỏ các ký tự khoảng trắng:

regexspaces.py
import re

s = '  Hello  World   From DigitalOcean \\t\\n\\r\\tHi There  '

print('Remove all spaces using regex:\\n', re.sub(r"\\s+", "", s), sep='')  # \\s matches all white spaces
print('Remove leading spaces using regex:\\n', re.sub(r"^\\s+", "", s), sep='')  # ^ matches start
print('Remove trailing spaces using regex:\\n', re.sub(r"\\s+$", "", s), sep='')  # $ matches end
print('Remove leading and trailing spaces using regex:\\n', re.sub(r"^\\s+|\\s+$", "", s), sep='')  # | for OR condition

Chạy tệp từ command line:

python3 regexspaces.py

Bạn nhận được đầu ra sau:

Remove all spaces using regex:
HelloWorldFromDigitalOceanHiThere
Remove leading spaces using regex:
Hello  World   From DigitalOcean
 Hi There
Remove trailing spaces using regex:
  Hello  World   From DigitalOcean
 Hi There
Remove leading and trailing spaces using regex:
Hello  World   From DigitalOcean
 Hi There

So sánh hiệu suất: Phương thức nào nhanh nhất?

Khi loại bỏ khoảng trắng khỏi chuỗi, đặc biệt trong các ứng dụng quan trọng về hiệu suất hoặc khi xử lý một lượng lớn văn bản, hiệu quả của phương thức bạn chọn là rất quan trọng. Phần này so sánh hiệu suất của các phương thức chính đã thảo luận và cung cấp hướng dẫn về thời điểm sử dụng từng phương thức.

Chúng ta sẽ sử dụng module timeit tích hợp sẵn của Python để đánh dấu hiệu suất (benchmark) các phương thức replace(), join()/split(), translate()re.sub().

Đánh dấu hiệu suất bằng timeit

Để so sánh tốc độ, chúng ta có thể chạy mỗi thao tác nhiều lần trên một chuỗi mẫu và đo tổng thời gian thực thi.

Ví dụ này sử dụng tệp sau, benchmark.py, để kiểm tra hiệu suất của từng phương thức trong việc loại bỏ tất cả các ký tự khoảng trắng:

benchmark.py
import timeit
import re
import string

s = '  Hello  World   From DigitalOcean \\t\\n\\r\\tHi There  ' * 1000
iterations = 10000

def method_replace():
    return s.replace(' ', '')

def method_join_split():
    return "".join(s.split())

def method_translate():
    return s.translate({ord(c): None for c in string.whitespace})

def method_regex():
    return re.sub(r"\\s+", "", s)

print(f"replace(): {timeit.timeit(method_replace, number=iterations)}")
print(f"join(split()): {timeit.timeit(method_join_split, number=iterations)}")
print(f"translate(): {timeit.timeit(method_translate, number=iterations)}")
print(f"regex(): {timeit.timeit(method_regex, number=iterations)}")

Chạy tệp này từ command line sẽ tạo ra kết quả thời gian. Các con số chính xác sẽ thay đổi tùy thuộc vào hệ thống của bạn, nhưng hiệu suất tương đối nói chung là nhất quán.

Một đầu ra điển hình có thể trông như thế này:

Output
replace(): 0.0152164
join(split()): 0.0489321
translate(): 0.0098745
regex(): 0.1245873

Từ những kết quả này, chúng ta có thể nhận thấy:

  • translate() thường là phương thức nhanh nhất để loại bỏ tất cả các loại khoảng trắng.
  • replace() rất nhanh để loại bỏ một ký tự cụ thể, nhưng nó không thể loại bỏ các loại khoảng trắng đa dạng trong một lần gọi.
  • join(split()) chậm hơn vì nó liên quan đến hai hoạt động riêng biệt: tạo một danh sách các chuỗi con (substrings) và sau đó nối chúng lại với nhau.
  • re.sub() (biểu thức chính quy) là phương thức chậm nhất do chi phí của công cụ biểu thức chính quy.

Hiệu quả bộ nhớ và các trường hợp sử dụng

Ngoài tốc độ, việc sử dụng bộ nhớ (memory) cũng là một yếu tố quan trọng khác, đặc biệt đối với các chuỗi rất lớn.

  • replace()translate(): Các phương thức này nói chung là hiệu quả về bộ nhớ vì chúng tạo ra một chuỗi mới duy nhất làm kết quả.
  • join(split()): Phương thức này có thể tốn nhiều bộ nhớ đối với các chuỗi có nhiều từ, vì split() trước tiên tạo một danh sách chứa tất cả các chuỗi con. Danh sách trung gian này có thể tiêu tốn một lượng bộ nhớ đáng kể.
  • re.sub(): Việc sử dụng bộ nhớ của biểu thức chính quy có thể thay đổi, nhưng nhìn chung nó kém hiệu quả hơn các phương thức chuỗi trực tiếp cho các tác vụ thay thế đơn giản.

Khi nào nên sử dụng từng phương thức

Dựa trên hiệu suất và chức năng, đây là hướng dẫn để chọn phương thức phù hợp:

  • Để chỉ loại bỏ khoảng trắng ở đầu và cuối: Sử dụng strip(), lstrip() hoặc rstrip(). Chúng nhanh, rõ ràng và được thiết kế đặc biệt cho mục đích này.
  • Để loại bỏ TẤT CẢ các ký tự khoảng trắng (bao gồm khoảng trắng, tab, xuống dòng): Sử dụng translate(). Đây là phương thức nhanh nhất và hiệu quả nhất cho tác vụ này.
  • Để gộp tất cả khoảng trắng thành một khoảng trắng duy nhất giữa các từ: Sử dụng " ".join(s.split()). Mặc dù không phải là phương thức nhanh nhất, nhưng đây là cách trực tiếp và dễ đọc nhất để đạt được sự chuẩn hóa cụ thể này.
  • Để loại bỏ dựa trên mẫu phức tạp (ví dụ: chỉ loại bỏ khoảng trắng giữa các số): Sử dụng re.sub(). Mặc dù là chậm nhất, nhưng sức mạnh và tính linh hoạt của nó là không thể sánh được đối với các tác vụ không thể xử lý bằng các phương thức chuỗi cơ bản.

Bằng cách chọn phương thức thích hợp dựa trên các yêu cầu cụ thể của bạn, bạn có thể đảm bảo code của mình không chỉ chính xác mà còn hiệu quả.

Những cạm bẫy thường gặp và các thực hành tốt nhất

Khi loại bỏ khoảng trắng, bạn rất dễ mắc phải các lỗi tinh vi nếu không cẩn thận. Phần này đề cập đến những cạm bẫy phổ biến cần tránh và các best practices (cách làm hiệu quả nhất) cần tuân theo để viết code mạnh mẽ và hiệu quả.

Bảo toàn khoảng trắng có chủ đích trong văn bản đã được định dạng

Một lỗi phổ biến là loại bỏ tất cả khoảng trắng khỏi một chuỗi khi bạn chỉ có ý định làm sạch các khoảng trống ở hai đầu hoặc khoảng cách thừa. Ví dụ: áp dụng replace(' ', '') cho một câu sẽ loại bỏ các khoảng trắng cần thiết giữa các từ.

  • Cách làm hiệu quả nhất: Trước khi chọn một phương thức, hãy xác định xem các khoảng trắng bên trong có ý nghĩa hay không. Nếu bạn chỉ cần loại bỏ khoảng trắng ở đầu và cuối, hãy luôn sử dụng strip(). Nếu bạn cần chuẩn hóa khoảng cách không nhất quán giữa các từ, hãy sử dụng " ".join(s.split()).
# Pitfall: Removing necessary spaces
formatted_string = "   Product ID: 123-456   "
print(formatted_string.replace(' ', ''))
# Output: 'ProductID:123-456' -> Data is now corrupted

# Best Practice: Use strip() to preserve internal spaces
print(formatted_string.strip())
# Output: 'Product ID: 123-456'

Xử lý giá trị None và các trường hợp đặc biệt

Áp dụng một phương thức chuỗi cho một biến có thể là None hoặc một kiểu dữ liệu không phải chuỗi (như một số) sẽ gây ra lỗi AttributeError. Điều này có thể làm sập ứng dụng của bạn nếu không được xử lý đúng cách.

  • Cách làm hiệu quả nhất: Luôn xác thực đầu vào của bạn trước khi cố gắng thao tác với nó. Bạn có thể làm điều này bằng cách kiểm tra xem biến có phải là None hay không hoặc bằng cách bao bọc thao tác trong một khối try-except
# Pitfall: Calling a method on a None value
user_input = None

# Best Practice: Check for None before processing
if user_input is not None:
    cleaned_input = user_input.strip()
else:
    cleaned_input = ""
print(f"Cleaned Input: '{cleaned_input}'")

Mẹo tối ưu hóa hiệu suất

Như đã trình bày trong phần so sánh hiệu suất, không phải tất cả các phương thức đều nhanh như nhau. Sử dụng một phương thức chậm trên một tập dữ liệu lớn hoặc trong một hàm được gọi thường xuyên có thể tạo ra một nút thắt cổ chai về hiệu suất.

  • Cách làm hiệu quả nhất: Chọn công cụ hiệu quả nhất cho công việc. Để loại bỏ tất cả các ký tự khoảng trắng, translate() là tùy chọn nhanh nhất. Để loại bỏ khoảng trắng ở đầu/cuối đơn giản, strip() được tối ưu hóa cao. Tránh sử dụng biểu thức chính quy (re.sub()) để loại bỏ khoảng trắng đơn giản, vì nó chậm hơn đáng kể.

Đánh đổi giữa khả năng đọc mã và hiệu quả

Mặc dù translate() là phương thức hiệu quả nhất để loại bỏ tất cả khoảng trắng, nhưng cú pháp của nó có thể kém trực quan hơn đối với các nhà phát triển mới so với một phương thức như replace().

  • Cách làm hiệu quả nhất: Ưu tiên khả năng đọc mã trừ khi bạn đang làm việc trong một ngữ cảnh quan trọng về hiệu suất. Đối với hầu hết các kịch bản (script) hàng ngày, một phương thức chậm hơn một chút nhưng dễ hiểu hơn thường là một lựa chọn tốt hơn.
  • Dễ đọc nhưng chậm hơn: " ".join(s.split()) rất rõ ràng về ý định chuẩn hóa khoảng trắng của nó.
  • Hiệu quả nhưng khó đọc hơn: s.translate({ord(c): None for c in string.whitespace}) nhanh hơn nhưng đòi hỏi phải hiểu về từ điển và phương thức translate.

Nếu hiệu suất trở thành một vấn đề, trước tiên hãy lập hồ sơ (profile) code của bạn để xác định nút thắt cổ chai, và chỉ sau đó thay thế một phương thức dễ đọc bằng một phương thức hiệu quả hơn, thêm một nhận xét để giải thích logic.

Câu hỏi thường gặp (FAQs)

1. Làm thế nào để loại bỏ khoảng trắng khỏi một chuỗi trong Python?

Có một số cách, tùy thuộc vào loại khoảng trắng bạn muốn loại bỏ:

  • Để loại bỏ tất cả khoảng trắng: Sử dụng replace():
my_string = "Hello World"
no_spaces = my_string.replace(" ", "")
# no_spaces is now "HelloWorld"

• Để chỉ loại bỏ khoảng trắng ở đầu và cuối: Sử dụng strip():

my_string = "  Hello World  "
trimmed = my_string.strip()
# trimmed is now "Hello World"

  • Để loại bỏ khoảng trắng bằng biểu thức chính quy (để xử lý nhiều loại khoảng trắng):
import re
my_string = "Hello   World"
no_spaces = re.sub(r"\\s+", "", my_string)
# no_spaces is now "HelloWorld"

2. Làm thế nào để loại bỏ khoảng trắng trong chuỗi?

Để loại bỏ tất cả khoảng trắng, sử dụng my_string.replace(" ", ""). Để chỉ loại bỏ khoảng trắng ở đầu và cuối, sử dụng my_string.strip().

3. Phương thức strip() trong Python làm gì?

Phương thức strip() trả về một chuỗi mới bằng cách loại bỏ tất cả các ký tự khoảng trắng ở đầu (ở phần đầu) và cuối (ở phần cuối). Ví dụ:

my_string = "   Hello World   "
trimmed = my_string.strip()
# trimmed = "Hello World"

4. Làm thế nào để loại bỏ khoảng trắng (trim) trong chuỗi Python?

Để “trim” khoảng trắng—nghĩa là chỉ loại bỏ chúng khỏi phần đầu và cuối của chuỗi—hãy sử dụng phương thức strip():

my_string = "   Trim me   "
trimmed = my_string.strip()
# trimmed = "Trim me"

5. “Stripping whitespace” trong Python là gì?

“Stripping whitespace” đề cập đến việc loại bỏ bất kỳ ký tự khoảng trắng ở đầu và cuối (bao gồm khoảng trắng, tab và xuống dòng) khỏi một chuỗi. Các phương thức strip(), lstrip()rstrip() thường được sử dụng cho mục đích này.

6. Làm thế nào để loại bỏ một phần của chuỗi trong Python?

Để loại bỏ một chuỗi con đã biết khỏi một chuỗi, bạn có thể sử dụng replace():

my_string = "Hello World"
removed_part = my_string.replace("World", "")
# removed_part = "Hello "

Nếu bạn cần loại bỏ nội dung theo chỉ mục (index), bạn có thể sử dụng slicing:

my_string = "Hello World"
# Remove "lo Wo"
removed_part = my_string[:3] + my_string[8:]
# removed_part = "Hello d"

7. Phương thức nào được sử dụng để loại bỏ khoảng trắng?

Phương thức strip() được sử dụng để loại bỏ khoảng trắng ở đầu và cuối của một chuỗi. Để loại bỏ khoảng trắng khỏi toàn bộ chuỗi, replace() có thể được sử dụng, và đối với các mẫu phức tạp hơn, bạn có thể sử dụng biểu thức chính quy thông qua module re.

8. Làm thế nào để loại bỏ khoảng trắng trong lệnh in của Python?

Khi sử dụng print() với nhiều đối số, Python mặc định sẽ thêm một khoảng trắng. Để tránh điều này, bạn có thể chỉ định tham số (parameter) sep:

print("Hello", "World", sep="")
# Outputs: "HelloWorld"

Nếu chuỗi của bạn đã chứa khoảng trắng mà bạn muốn loại bỏ, hãy áp dụng .replace(" ", "") hoặc strip() trước khi in:

my_string = "Hello World"
print(my_string.replace(" ", ""))
# Outputs: "HelloWorld"

Kết luận

Trong hướng dẫn này, bạn đã tìm hiểu nhiều phương pháp khác nhau để xóa khoảng trắng khỏi chuỗi trong Python. Các phương pháp này bao gồm sử dụng strip(), replace(), kết hợp join()split(), translate() và biểu thức chính quy. Mỗi phương thức có một trường hợp sử dụng riêng và có thể được chọn dựa trên các yêu cầu cụ thể của công việc của bạn.

0 Bình luận

Đăng nhập để thảo luận

Chuyên mục Hướng dẫn

Tổng hợp các bài viết hướng dẫn, nghiên cứu và phân tích chi tiết về kỹ thuật, các xu hướng công nghệ mới nhất dành cho lập trình viên.

Đăng ký nhận bản tin của chúng tôi

Hãy trở thành người nhận được các nội dung hữu ích của CyStack sớm nhất

Xem chính sách của chúng tôi Chính sách bảo mật.

Đăng ký nhận Newsletter

Nhận các nội dung hữu ích mới nhất