Computer >> Máy Tính >  >> Lập trình >> Python

Làm cách nào để khớp văn bản ở đầu hoặc cuối chuỗi trong Python?

Vấn đề ..

Giả sử bạn cần kiểm tra phần đầu hoặc phần cuối của một chuỗi để tìm một 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 tệp nhưng cũng có thể là bất kỳ thứ gì. Tôi sẽ chỉ cho bạn một số phương pháp về cách bạn có thể thực hiện việc này.

Phương thức startswith ()

Một cách đơn giản để kiểm tra sự bắt đầu của một chuỗi là sử dụng phương thức startwith ().

Ví dụ

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

Đầu ra

True

Ví dụ

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

Đầu ra

True

Ví dụ

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

Đầu ra

False

Ví dụ

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

Đầu ra

True
Phương thức

endwith ().

Một cách đơn giản để kiểm tra phần cuối của một chuỗi là sử dụng phương thức endwith ().

Đầu ra

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

Đầu ra

True

Ví dụ

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

Đầu ra

True

Bây giờ nếu chúng ta muốn kiểm tra nhiều lựa chọn bằng các phương pháp trên, chúng ta cần cung cấp các bộ giá trị. Một trong những cách sử dụng phổ biến là kiểm tra phần mở rộng tệp, giả sử chúng tôi cần xác thực cho các tệp ".txt" và ".csv" trong một thư mục.

import os
filenames = os.listdir('.')
# Let us first check if there are files
print(f"output \n {any(name.endswith(('.csv',',txt')) for name in filenames)}")

Đầu ra

True

Đầu ra

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

Đầu ra

['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']

Hãy nhớ rằng các phương thức này chấp nhận các bộ giá trị, nếu bạn có một danh sách các lựa chọn để tìm kiếm, thì chúng tôi cần chuyển đổi chúng thành các bộ giá trị.

import os

# list with choices
patters = ['.csv','.txt']

# get the file names
filenames = os.listdir('.')

# Let us first check if there are files
any(name.endswith(patters) for name in filenames)

Đầu ra

---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
in
8
9 # Let us first check if there are files
---> 10 any(name.endswith(patters) for name in filenames)

in (.0)
8
9 # Let us first check if there are files
---> 10 any(name.endswith(patters) for name in filenames)

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

Lệnh trên trả về một lỗi, vì vậy chúng tôi cần chuyển đổi danh sách thành một bộ tuple.

Ví dụ

# Let us first check if there are files
any(name.endswith(tuple(patters)) for name in filenames)

Đầu ra

True

Tương tự, chúng ta cần chuyển đổi danh sách thành tuple để lấy tên tệp.

Ví dụ

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

Đầu ra

['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']

Cuối cùng, các phương thức startwith () và endwith () trông đẹp mắt khi kết hợp với các hoạt động khác, chẳng hạn như giảm dữ liệu thông thường. Ví dụ:

Ví dụ

if any(name.endswith(tuple(patters)) for name in filenames):
<perform the logic here>