Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Cách kiểm tra chuỗi bắt đầu hoặc kết thúc bằng mẫu (pattern) trong Python

Vấn đề

Giả sử bạn cần kiểm tra đầu hoặc cuối của một chuỗi cho các mẫu văn bản cụ thể. Các mẫu phổ biến có thể là phần mở rộng tên file nhưng cũng có thể là bất kỳ thứ gì. Dưới đây là các phương pháp để thực hiện.

Phương thức startswith()

Cách đơn giản để kiểm tra đầu chuỗi là dùng phương thức startswith().

Ví dụ 1


text = "Is USA colder than Australia?"
print(f"output \n {text.startswith('Is')}")

Kết quả: True

Ví dụ 2


filename = "Hello_world.txt"
print(f"output \n {filename.startswith('Hello')}")

Kết quả: True

Ví dụ 3


site_url = 'https://www.something.com'
print(f"output \n {site_url.startswith('http:')}")

Kết quả: False

Ví dụ 4


print(f"output \n {site_url.startswith('https:')}")

Kết quả: True

Phương thức endswith()

Cách đơn giản để kiểm tra cuối chuỗi là dùng phương thức endswith().

Ví dụ 1


text = "Is USA colder than Australia?"
print(f"output \n {text.endswith('?')}")

Kết quả: True

Ví dụ 2


filename = "Hello_world.txt"
print(f"output \n {filename.endswith('.txt')}")

Kết quả: True

Kiểm tra nhiều lựa chọn với tuple

Nếu muốn kiểm tra nhiều lựa chọn, cần cung cấp tuple. Ví dụ thường gặp: kiểm tra đuôi file .txt và .csv trong thư mục.


import os
filenames = os.listdir('.')

Kiểm tra xem có file nào khớp không


print(f"output \n {any(name.endswith(('.csv', '.txt')) for name in filenames)}")

Kết quả: True

Liệt kê các file khớp


[name for name in filenames if name.endswith(('.csv', '.txt'))]

Kết quả:


['file1.csv', 'HRDataset.csv', 'Input.csv', 'input.txt', 'input_copy.txt',
 'movies_data.csv', 'my_html_data_to_csv.csv', 'temporary_file1_for_zip.csv',
 'temporary_file2_for_zip.csv', 'test.csv', 'test1.txt', 'test2.txt',
 'tmdb_5000_movies.csv']

Lưu ý quan trọng: Chỉ chấp nhận tuple

Phương thức startswith() và endswith() chỉ chấp nhận chuỗi hoặc tuple chuỗi. Nếu bạn có danh sách (list) lựa chọn, phải chuyển thành tuple.

Sai - dùng list


patters = ['.csv', '.txt']
any(name.endswith(patters) for name in filenames)

Lỗi: TypeError: endswith first arg must be str or a tuple of str, not list

Đúng - chuyển list thành tuple


any(name.endswith(tuple(patters)) for name in filenames)

Kết quả: True

Liệt kê file với tuple


[name for name in filenames if name.endswith(tuple(patters))]

Kết hợp với các phép toán khác

Các phương thức này rất hữu ích khi kết hợp với các phép giảm dữ liệu (data reductions). Ví dụ:


if any(name.endswith(tuple(patters)) for name in filenames):
    # thực hiện logic tại đây
    pass